阻止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
提交
取消