亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

阻止PHP中的目錄遍歷但允許路徑

阻止PHP中的目錄遍歷但允許路徑

青春有我 2019-07-20 10:10:04
阻止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!}


查看完整回答
反對 回復 2019-07-20
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

僅僅檢查./或類似的模式是不夠的。以“./”為例,哪個URI編碼為“%2e%2e%2f”。如果您的模式檢查發生在解碼之前,您將錯過這一遍歷嘗試。黑客還可以做一些其他的技巧來繞過模式檢查器,特別是在使用編碼字符串時。

正如ircmaxwell所建議的那樣,我通過使用realpath()之類的方法將任何路徑字符串規范化到其絕對路徑,從而成功地阻止了這些事件。只有到那時,我才開始通過將遍歷攻擊與我預定義的基本路徑相匹配來檢查遍歷攻擊。


查看完整回答
反對 回復 2019-07-20
  • 3 回答
  • 0 關注
  • 943 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號