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