菜单开关

周梦康 发表于 2019-01-23 229 次浏览 标签 : 安全

假如我们需要替换 uri 参数中的../还有\

str_replace(["..", "/", "\\"], "", $url);
// 这个 ./. 就逃过了检测  正好变成了  ..

解决方案1

多次过滤

$block = str_replace("/", "", $block);
$block = str_replace("\\", "", $block);
$block = str_replace("..", "", $block); // 还得放最下面

解决方案2

只做白名单机制

function uriArgvFilter($argv){
    $len = strlen($argv);
    $res = "";
    for($i =0 ;$i<$len;$i++){
        $c = substr($argv,$i,1);
        if (($c >= 'a' && $c <= 'z') ||
            ($c >= '0' && $c <= '9') ||
            ($c >= 'A' && $c <= 'Z') ||
            $c == '_' || $c == '-' ||
            $c == '.'){
            $res .= $c;
        }
    }

    return $res;
}

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表