2009-08-03 73 views
5

我已經有了使用HTML輸入的用戶輸入(使用tinyMCE輸入)的常見情況。我需要針對XSS攻擊提供一些服務器端保護,並且正在尋找人們正在使用的經過充分測試的工具來執行此操作。在PHP方面,我看到很多像HTMLPurifier這樣的庫來完成這項工作,但我似乎無法在.NET中找到任何東西。.NET HTML白名單(反xss /跨站腳本)

基本上,我在尋找一個庫來篩選下來的標籤白名單,屬性上的廣告代碼,並做正確的事與「困難」的屬性,如:href和IMG:SRC

我已經看過傑夫阿特伍德的帖子http://refactormycode.com/codes/333-sanitize-html,但我不知道它是如何最新的。它對網站目前使用的內容有任何影響嗎?在任何情況下,我都不確定對於嘗試將有效輸入進行正規化的策略感到滿意。

本博客文章中提出了似乎是一個更引人注目的策略:

http://blog.bvsoftware.com/post/2009/01/08/How-to-filter-Html-Input-to-Prevent-Cross-Site-Scripting-but-Still-Allow-Design.aspx

這種方法實際上解析HTML到DOM,驗證,然後從中重建有效的HTML。如果HTML解析能夠合理處理格式錯誤的HTML,那麼很好。如果沒有,沒有什麼大不了的 - 我可以要求格式良好的HTML,因爲用戶應該使用tinyMCE編輯器。無論哪種情況,我都會重寫我所知道的安全,格式良好的HTML。

問題是這只是一個描述,沒有鏈接到任何實際執行該算法的庫。

這樣的圖書館是否存在?如果不是,那麼什麼是一個好的.NET HTML解析引擎?什麼正則表達式應該用來執行額外的驗證a:href,img:src?我在這裏錯過了其他重要的東西嗎?

我不想在這裏重新實現一個越野車輪。當然,這裏有一些常用的庫。有任何想法嗎?

回答

3

那麼如果你想解析,而你擔心無效(x)HTML進來,那麼HTML Agility Pack可能是最好的解析方法。請記住,雖然它不僅僅是元素,而且還包括您需要允許的元素的屬性(當然,您應該使用允許的元素及其屬性的白名單,而不是嘗試去除可能通過黑名單躲避的事情)

另外還有OWASP AntiSamy Project這是進步的正在進行的工作 - 他們也有一個test site你可以嘗試XSS

正則表達式這可能是太冒險了IMO。

1

幾年前,當我使用TinyMCE時,我遇到了完全相同的問題。

對於.Net,似乎還沒有任何像樣的XSS/HTML白名單解決方案,所以我上傳了一個我創建並使用了幾年的解決方案。

http://www.codeproject.com/KB/aspnet/html-white-listing.aspx

白名單defnintion是基於TinyMCE的的有效元素。

取得二: 放眼望去,微軟最近發佈了基於防XSS庫(V3.0)白名單,檢查出:

微軟反跨站點腳本 圖書館V3 .0(Anti-XSS V3.0) 是一個編碼庫,旨在幫助開發人員保護其基於Web的應用程序免受XSS 攻擊。它與大多數編碼 庫的不同之處在於,它使用白名單技術 - 有時稱爲 包含原則的 - 提供針對XSS攻擊的保護 。這種方法 通過先定義一個有效或 允許的字符集的作品,並 編碼任何超出此設置 (無效字符或潛在攻擊01​​)。該白名單辦法 提供了其他 編碼方案的幾個優點。在此 版本的Microsoft反跨 站點腳本庫的新功能包括: - 性能改進 - - 性能數據表(在網上 幫助) - 支持更多 語言的 擴大白名單支持編碼 SHIFT_JIS用於移動瀏覽器 - 一個樣本 應用 - 安全運行時引擎 (SRE)HTTP模塊

3

微軟有一個開源庫,以防止XSS:AntiXSS

+0

這個答案有什麼問題?爲什麼它低調? – 2009-08-22 08:23:58

+2

好AntiXSS只是編碼,它不是一個脫衣舞或白名單解決方案(還) – blowdart 2009-08-22 08:25:49

2

http://www.microsoft.com/en-us/download/details.aspx?id=28589 你可以在這裏下載一個版本,但我把它鏈接到了有用的DOCX文件。我的首選方法是使用NuGet包管理器,以獲得最新AntiXSS包。

您可以使用4.x AntiXss庫中的HtmlSanitizationLibrary程序集。需要注意的是GetSafeHtml()是在HtmlSanitizationLibrary,Microsoft.Security.Application.Sanitizer下。

0

https://github.com/Vereyon/HtmlRuleSanitizer正好解決了這個問題。

將wysihtml5編輯器集成到ASP.NET MVC應用程序中時,遇到了這個挑戰。我注意到,它有一個非常漂亮而又簡單的白名單基於消毒劑,其使用的規則允許HTML的一個子集通過。我實現了它的服務器端版本,它取決於HtmlAgility包進行解析。

Microsoft Web保護庫(以前的AntiXSS)似乎只是簡單地撕掉幾乎所有的HTML標籤,而且從我讀的內容中,您無法輕鬆地將規則定製到您要使用的HTML子集。所以這不是我的選擇。

HTML sanitizer也看起來很有前途,將是我的第二選擇。