我已收到其他人的系統代碼,該系統在瀏覽器中顯示包含照片的文件夾。PHP實時路徑無法阻止目錄遍歷
例如,這是在網站上的URL可能:
gallery.php?action=view&folder=Cars
此刻,你可以將「汽車」與../../../../../,它將高興地顯示Linux根文件夾。幸運的是,該網站目前處於離線狀態。
我嘗試使用真實路徑來解決這個問題。這是我到目前爲止有:
case 'view' :
$name = realpath(dirname(__FILE__) . "/Content/Gallery/" . $_GET['folder']);
echo $name;
$data = $file->getPictures($name);
require 'Views/Gallery.view.php';
break;
我已經加入回聲在第三行看到的網址是什麼。在上面的網址,一切都很好,回聲輸出:
/var/www/Content/Gallery/Cars
到目前爲止,這麼好。但是,如果我輸入/../../../../../../../../而不是「Cars」,則$ name將變爲/並且頁面仍顯示根文件夾。英語不是我的第一語言,所以我可能會誤解實際路徑的工作方式或做法。根據我的理解,它會從給定的URL中刪除../的任何實例。
有人可以告訴我我做錯了什麼嗎?
的[防止目錄遍歷在PHP,但允許路徑(可能重複http://stackoverflow.com/questions/4205141/prevent-directory-traversal-in-php-but-allowed-paths) –
這就是爲什麼PHP會得到一個糟糕的說唱:\ –
@Mike爲什麼? 'realpath()'不是爲了對抗目錄遍歷攻擊而設計的;也沒有聲稱這樣做 –