2 回答

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