阻止PHP中的目錄遍歷但允許路徑我有一條基本路徑/任何/foo/和$_GET['path']應(yīng)該是相對的。然而,我如何做到這一點(diǎn)(讀取目錄),而不允許目錄遍歷?例如。/\.\.|\.\./不會(huì)正確過濾。
3 回答

浮云間
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
我在幾個(gè)片段中看到了這個(gè)解決方案,但是它有一個(gè)與realpath()
..這個(gè)realpath()
函數(shù)移除尾隨目錄分隔符,因此設(shè)想兩個(gè)連續(xù)目錄,如:
/foo/bar/baz/ /foo/bar/baz_baz/
如realpath()
將刪除最后一個(gè)目錄分隔符,如果$_GET['path']
等于“./baz_baz”,因?yàn)樗愃朴?/p>
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貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
- 3 回答
- 0 關(guān)注
- 949 瀏覽
添加回答
舉報(bào)
0/150
提交
取消