2011-05-04 33 views
0

假設您希望允許非技術用戶控制出現在公共站點/應用程序中的內容。如果內容僅爲文本,則可以在顯示文本時對文本進行HTML編碼,以防止惡意腳本在進入數據庫時​​執行。安全地呈現HTML而不使用HTML編碼

如果要將數據顯示爲HTML(即通過所見即所得編輯器輸入數據)時,有哪些選項可用於防止此情況發生?每次我想要顯示它時,我將不得不使用黑名單清理數據?

此外,假設數據已被泄漏。如果HTML編碼不是一種選擇,我真的很想找到方法來限制這種攻擊造成的損失。

爲了我的目的,該網站正在運行ASP.NET MVC 3,並且正在使用jQuery。

回答

3

您始終可以將元素和屬性名稱列入白名單而不是列入黑名單。 .NET HTML whitelisting (anti-xss/Cross Site Scripting)討論了用於.NET的白名單HTML清理程序。

其他選項包括將內容加載到一次性域中的iframe中,但這不會阻止內容執行某些類型的攻擊 - 重定向到釣魚頁面,開始下載惡意軟件,掃描本地網絡,利用XSRF漏洞使用用戶的憑據等

+0

我去了微軟的AntiXSS庫 - 使用起來非常簡單。聽到默認的HTML編碼是黑名單方法,我真的很驚訝嗎?無論如何 - 感謝指引我邁向白名單(我意識到這個概念 - 只是沒有想到將其應用於HTML)。 – Mayo 2011-05-06 14:58:47

+0

「默認的HTML編碼是黑名單方法?」:因爲字符集是有限的,它同時列入黑名單和白名單。假設字符集是「abcd」如果你說「字符a和b不允許」或者「c和d允許」是相同的。 – usr 2011-05-26 18:43:46

+0

@usr。清楚的是,我只是在元素和屬性名稱的背景下討論了白名單。根據一些定義,你是對的,當涉及到有限集合時,黑名單和白名單之間沒有區別。但有些人將白名單定義爲只允許那些你可以證明是安全的事物,而將黑名單列入禁止那些證明有害的事物。根據這些定義,有限集合的黑名單和白名單元素之間可能存在重大差異。 – 2011-05-26 19:16:35