2010-02-21 189 views
5

注意:我照顧SQL注入和輸出轉義其他地方 - 這個問題只關於輸入過濾,謝謝。用戶輸入過濾 - 我需要過濾HTML嗎?

我正在重構我的用戶輸入過濾函數。在GET/POST參數傳遞到特定類型的過濾器filter_var()之前,我做了以下內容:

現在的問題:將參數傳遞給像htmLawedHTML Purifier這樣的過濾器還是有意義的,還是我可以將輸入視爲安全的?在我看來,這兩個主要不同在於允許的HTML元素和屬性的粒度(我不感興趣,因爲我刪除了所有內容),但htmLawed文檔有一段關於'dangerous characters'的部分,這表明可能有一個原因使用它。在這種情況下,它會是一個理智的配置?

+0

危險字符可能是UTF-8控制字符。 – Jacco 2010-02-21 13:14:46

+0

有關如何擺脫它們的任何建議? – djn 2010-02-21 15:40:55

+1

我並沒有真正瞭解你的注意事項,SQL注入是關於防止SQL查詢中令人討厭的用戶輸入。事實上,大多數的漏洞都是由於討厭的INPUT,而不是輸出。這些被稱爲「污點和水槽」漏洞。 – rook 2010-02-21 23:59:30

回答

2

但是也有一些安全的許多不同的方法來XSS。唯一的原因是要知道你的方法是否可以利用水資源是爲了測試開發。我建議使用Free XSS vulnerability Scanner *或開放源代碼wapiti

說實話我永遠不會使用strip_tags()因爲你並不總是需要html標籤來執行javascript!我喜歡htmlspecialchars($var,ENT_QUOTES);

例如,這一點容易被XSS:

print('<A HREF="http://www.xssed.com/'.strip_tags($_REQUEST[xss]).'">link</a>'); 

你不需要<>在這種情況下執行JavaScript的,因爲你可以使用 的onmouseover,這裏有一個例子攻擊:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"'; 

ENT_QUOTES將處理將修補此XSS漏洞的雙引號。

*我隸屬於本網站/服務。

+0

非常好的一點!謝謝! 我在http:// php找到了一個事件列表。net/manual/en/function.strip-tags.php#82180並將數組傳遞給str_ireplace() - 這應該照顧它。 – djn 2010-02-22 02:00:17

+1

請注意[促銷](http://stackoverflow.com/faq#promotion)準則。 – 2011-12-31 00:47:56

0

我覺得你在做什麼是安全的,從我的角度來看至少沒有HTML代碼應該通過你的過濾器獲得

+0

-1是的,但JavaScript仍然可以通過這些過濾器。 – rook 2010-02-21 23:51:18