2 回答

TA貢獻1887條經(jīng)驗 獲得超5個贊
要對 URL 中的保留實體(特殊字符)進行編碼,請使用百分比編碼。
例如,感嘆號!
被編碼為%21
。對于您提到的字符,您可以查閱 ASCII 表來了解其值應(yīng)該是什么。
我在想,也許我不會給用戶一個命名文件夾并直接使用 mkdir 創(chuàng)建的機會,而是將他們選擇的文件夾名稱上傳到數(shù)據(jù)庫并創(chuàng)建一個僅具有遞增值的文件夾。
是的,您絕對不應(yīng)該讓用戶選擇磁盤上文件的名稱。如果您這樣做并且不非常小心,則可能會受到一系列攻擊。最常見的情況是用戶上傳可執(zhí)行內(nèi)容,或使用相對路徑寫入其他位置。例如,他們可能會上傳something-evil.php
,并且您的網(wǎng)絡(luò)服務(wù)器可能配置錯誤,并且在訪問 時實際上運行了他們的代碼https://example.com/uploads/something-evil.php
。或者,也許他們上傳類似內(nèi)容../../../../etc/init.d/evil-script
并在您的服務(wù)器上運行。
正如您所提議的那樣,通過不允許用戶控制文件名來完全避免問題更容易。只需確保它們無法覆蓋其他文件,或者根本無法命名這些文件,即使它們位于另一個文件夾中。
現(xiàn)在,讓我們檢查一下您的代碼......
$chapterDir?=?scandir("series/"?.?$seriesGet?.?"/");
這很危險!用戶指定要讀取的路徑。正如我上面所說,您實際上允許他們插入相對路徑并讀取 PHP 可以讀取的任何內(nèi)容。配置錯誤的 Web 服務(wù)器很常見,您不希望它們從存儲中讀取不應(yīng)該讀取的內(nèi)容。
echo?"<a?href='testScript.php?series=".?$seriesDir[$arrayStart]?."'>"...
切勿將任意數(shù)據(jù)連接到 HTML 上下文中!這里實際上存在多個問題。首先,您必須對 URL 中使用的任何內(nèi)容進行 URL 編碼。使用urlencode()
。其次,您的數(shù)據(jù)不會針對 HTML 進行轉(zhuǎn)義,因此某些數(shù)據(jù)可能會在某些腳本標記或其他內(nèi)容中泄漏,甚至只是使您的 HTML 無效。使用htmlspecialchars()
您注入到 HTML 中的任意數(shù)據(jù),即使它是您自己的可信數(shù)據(jù)。您要將數(shù)據(jù)從一個上下文移動到另一個上下文,并且需要對其進行正確轉(zhuǎn)義。
- 2 回答
- 0 關(guān)注
- 210 瀏覽
添加回答
舉報