浮云间
ircmaxell的回答不完全正确。我在几个片段中看到了这个解决方案,但是它有一个与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!}