阻止PHP中的目录遍历但允许路径我有一条基本路径/任何/foo/和$_GET['path']应该是相对的。然而,我如何做到这一点(读取目录),而不允许目录遍历?例如。/\.\.|\.\./不会正确过滤。
3 回答
浮云间
TA贡献1829条经验 获得超4个赞
我在几个片段中看到了这个解决方案,但是它有一个与realpath()
..这个realpath()
函数移除尾随目录分隔符,因此设想两个连续目录,如:
/foo/bar/baz/ /foo/bar/baz_baz/
如realpath()
将删除最后一个目录分隔符,如果$_GET['path']
等于“./baz_baz”,因为它类似于
strpos("/foo/bar/baz_baz", "/foo/bar/baz")
也许:
$basepath = '/foo/bar/baz/';$realBase = realpath($basepath);$userpath = $basepath . $_GET['path'];$realUserPath = realpath($userpath);if ($realUserPath === false || strcmp($realUserPath, $realBase) !== 0 || strpos($realUserPath, $realBase . DIRECTORY_SEPARATOR) !== 0) { //Directory Traversal!} else { //Good path!}
FFIVE
TA贡献1797条经验 获得超6个赞
添加回答
举报
0/150
提交
取消