首先我會從書中直接引用編譯PHP下載鏈接
基名()提取路徑的文件名部分,所以如果 基本名($ _ GET [「文件」])是不同的從$ _GET ['file'],你知道有一個嘗試 探測你的服務器。
假設我有這個下載鏈接。
<a href="download.php?file=image.jpeg">Click here to download image</a>
和的download.php文件,我有這行代碼:
if (isset($_GET['file']) && basename($_GET['file']) == $_GET['file']) {
// do something with the file
}
如果我更改文件查詢中的鏈接(從瀏覽器的地址欄),比方說,我改變它於:
download.php?file=passwords.txt
從我可以從的download.php條件線看,它不會使在文件查詢鏈接的檢查的差異,病情可以被理解爲:
isset($_GET['file']) // This evaluates to TRUE because now it contains passwords.txt
basename($_GET['file']) // This will contain passwords.txt
$_GET['file'] // This will contain passwords.txt
這是否意味着試圖阻止用戶使用download.php中的條件從瀏覽器注入惡意查詢是錯誤的?至少使用書中的代碼。
我可以使用數組來存儲用戶可以安全下載的有效文件,並使用in_array()
函數進行檢查。還是說我讀錯了代碼?
基本上我想在這裏說的是,如果你改變鏈接中的文件查詢,download.php中的條件總是計算爲true。我對嗎?
感謝您的回覆。我只是想知道我讀的代碼是正確的。 –