回答
「足夠的消毒」完全取決於你在說什麼環境。 MySQL的消毒應該被認爲是完全獨立的免於網絡輸出的消毒,您應該單獨處理它們以避免很多麻煩。
消毒的MySQL
mysql_real_escape_string()
將消毒一塊數據並使其安全地把一個SQL查詢中。- 任何其他類型的惡意數據(如字符串內的HTML標籤)都應該被完全忽略。試圖在這裏操縱它會導致你頭痛,因爲你試圖在將它從數據庫中取出後「解除」它。錯誤的「網絡數據」不能損害您的數據庫。
消毒輸出
htmlspecialchars($val)
在輸出時將防止渲染任何惡意代碼,因爲<
和>
字符轉換爲它們的實體表示而不是呈現爲標籤分隔符。- 如果你輸出的東西是一個HTML元素的引用屬性中,如
<input name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" />
這應該是你所需要的,除非你有特殊要求使用ENT_QUOTES
修改。 strip_tags()
不應該真的用於消毒,因爲它可能被形成不良的HTML愚弄。消毒是一個有價值的目標,如果你可以保持你的上下文分離,你將遇到更少的數據操作問題。
在字符串上調用htmlentities()而不是在strip_tags()上計算可能更安全和更好。
用strip_tags()將不會刪除HTML特殊字符像'"&
例如,如果你的代碼是:
<img src="<?= strip_tags($myVar) ?>">
和
$myVar = '">something goes here<';
那麼你結束了:
<img src="">something goes here<">
這顯然是XSS洞的根;一個實際的漏洞被留下來作爲讀者的練習。
我最初upvoted弗蘭克的答案,但想到一個問題:ヶ輛()將打破合法的URL是這樣的:
http://www.mywebsite.com/profile?id=jojo&w=60&h=60
也許剝尖括號+ mysql_real_escape就足夠了?
儘管圖像網址中不應該包含&符或它們? – aslum 2010-01-12 02:39:41
爲什麼不呢?腳本是完全有效的圖像源。 – 2010-01-12 02:40:40
htmlentities()將在該URL上正常工作。事實上,標準要求在您的屬性中編碼&&。 ''是有效的html(並且瀏覽器將按照預期將URL作爲'example.com/?a&b'來執行)。另一方面''是無效的 - 但瀏覽器無論如何可能會做的事情。例如,如果您在帖子中的網址上查看源代碼,則會看到SO在href屬性中使用&。 – 2010-01-12 02:44:27
- 1. Webservice安全性 - 什麼是足夠的?
- 2. MapReduce不足夠的任務是什麼?
- 3. htaccess mod_rewrite消毒的URL
- 4. 消毒提交的URL
- 5. 紅寶石消毒代碼...爲什麼和消毒
- 6. 足夠替換/在URL中
- 7. Scrapy消毒url鏈接
- 8. 爲什麼.RData當.R足夠時
- 9. 自動更新 - 什麼是「足夠」的安全性?
- 10. 什麼是消毒destroy_all的最佳方式 - Rails的
- 11. LayoutAwarePage的MVVM是否足夠?
- 12. firebase隊列消毒的用例是什麼?
- 13. 消毒用戶輸入的最佳方式是什麼?
- 14. 足夠的保護足夠了嗎?
- 15. 什麼適合我? generateAllGrams()還是generateCollocations()足夠我?
- 16. 如何消毒角4的URL
- 17. xmalloc中毒的目的是什麼
- 18. 使用$ _GET進行頁面重定向的這種消毒是否正常/足夠?
- 19. 規則是什麼?我何時使用$(this),什麼時候「this」足夠?
- 20. 什麼是HCC?它是病毒嗎?
- 21. Gmail是否足夠安全?
- 22. java.util.regexp是否足夠高效?
- 23. MinGW是否足夠穩定
- 24. shell腳本是否足夠?
- 25. uNhAddIns是否足夠活躍?
- 26. PHP是否足夠動態?
- 27. 這是否足夠安全?
- 28. hunchentoot-1.2.3中是否有足夠的url函數被刪除?
- 29. 命令模式是否足夠有效,它的具體好處是什麼?
- 30. hasfile()有什麼用?是必需的字段驗證程序是否足夠?
我收到了類似問題的一些很好的答案;如果您願意,請查看http://stackoverflow.com/questions/549987/what-is-the-best-way-to-filter-urls-for-input。正如Mike Boers的回答所建議的,最好的解決方案可能是徹底重建URL。 – JAL 2010-01-12 02:33:54