2009-07-31 187 views
11

我正在使用HTML Purifier來保護我的應用程序免受XSS攻擊。目前,我正在淨化來自所見即所得編輯器的內容,因爲這是允許用戶使用XHTML標記的唯一地方。HTML淨化器 - 要淨化什麼?

我的問題是,我是否也應該在登錄驗證系統(或註冊頁面的輸入字段,如電子郵件,姓名,地址等)上使用HTML Purifier還使用用戶名和密碼?有XSS攻擊的機會嗎?

回答

13

你應該淨化任何可能會在頁面上顯示的東西。由於有XSS攻擊,黑客放入<script>標籤或其他可鏈接到其他網站的惡意標籤。

密碼和電子郵件應該沒問題。不應該顯示密碼,電子郵件應該有自己的驗證器,以確保它們的格式正確。

最後,請務必記住在內容中放置htmlentities()。

哦..看看filter_var也是。非常好的過濾變量的方式。

+3

+1 filter_var – 2009-07-31 01:54:16

3

XSS風險存在於其他用戶可以查看某個用戶輸入的數據可能的地方。即使這些數據目前無法查看,也不要以爲不需要這樣做。

只要輸入用戶名和密碼,就不應該顯示密碼,甚至不能以可顯示的形式存儲它(即用sha1()來加密)。對於用戶名,對合法字符有限制,如[A-Za-z0-9_]。最後,如其他答案所示,對於任何可能包含保留或特殊html字符的輸入數據,使用您的語言html實體編碼函數,這可以防止此數據在顯示時導致語法錯誤。

1

不,我不會在登錄驗證期間在用戶名和密碼上使用HTMLPurifier。在我的應用程序中,我使用字母數字用戶名和輸入驗證過濾器,並使用ENT_QUOTES與htmlspecialchars一起顯示它們。這非常有效,比HTML Purifier快得多。我還沒有看到使用字母數字字符串的XSS攻擊。而BTW HTMLPurifier在過濾字母數字內容時無用,所以如果您通過字母數字過濾器強制輸入字符串,則無法使用HTMLpurifier顯示它。當涉及到密碼時,它們絕不應該首先顯示給任何人,從而消除XSS的可能性。如果出於某種不合理的原因想要顯示密碼,那麼您應該設計應用程序的方式是它只允許密碼的所有者能夠看到它,否則,您會受到很大的影響,XSS是最少的你的擔心!

0

HTML淨化器需要HTML作爲輸入,並生成HTML作爲輸出。其目的是允許用戶在輸入html時使用某些標籤,屬性和值,同時過濾掉其他的。這使用白名單來防止任何可能包含腳本的數據。所以這對於像WYSIWYG編輯器這樣的東西很有用。

用戶名和密碼另一方面不是HTML。他們純文本,所以HTML淨化器不是一個選項。試圖在這裏使用HTML Purifier會破壞數據,或者允許XSS攻擊。

例如,它允許通過改變以下,當在某些元素的屬性值插入這可能會導致XSS問題:

" onclick="javascript:alert()" href=" 

或者,如果有人試圖在他們的密碼使用特殊符號,並進入:

<password 

那麼他們的密碼就會變成空白,並且使猜測更容易。

相反,您應該編碼文本。所需的編碼依賴於上下文,但這些輸出值時,你可以使用htmlentities如果你堅持規則#0規則#1,在OWASP XSS Prevention Cheat Sheet