例如,StackExchange白名單HTML的一個子集: https://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-exchange-sites如何驗證HTML輸入以防止XSS?
你怎麼能這樣做在你的控制器,以確保用戶的輸入是安全的?
例如,StackExchange白名單HTML的一個子集: https://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-exchange-sites如何驗證HTML輸入以防止XSS?
你怎麼能這樣做在你的控制器,以確保用戶的輸入是安全的?
此方法與StackExchange不同,但我發現AntiXSS 4.x庫是一種簡單的方法來清理輸入以允許「安全」的HTML。
http://www.microsoft.com/en-us/download/details.aspx?id=28589你可以在這裏下載一個版本,但我把它鏈接到了有用的DOCX文件。我的首選方法是使用NuGet包管理器來獲取最新的AntiXSS包。
您可以使用4.x AntiXss庫中的HtmlSanitizationLibrary程序集。請注意,GetSafeHtml()位於Microsoft.Security.Application.Sanitizer下的HtmlSanitizationLibrary中。
content = Sanitizer.GetSafeHtml(userInput);
這可以在保存到數據庫之前完成。優點是立即刪除惡意內容,而不必擔心在輸出時出現惡意內容。缺點是它不會處理任何現有的數據庫內容,並且您在進行數據庫更新時必須應用這些內容。
另一種方法是在每次輸出內容時使用此方法。
我很想聽聽首選方法是什麼。
您可以嘗試JSoup解析器,它可以同時清理HTML輸入,還可以提供許多功能。 你可以訪問http://jsoup.org/瞭解JSoup的更多細節,並從那裏下載二進制文件。 它提供了DOM方法遍歷HTML樹並獲得所需的元素。
儘管清理HTML生成的代碼以防止XSS攻擊是一種很好的做法,但我強烈建議避免使用任何解析器通過清理HTML輸入來避免XSS附加。 如果您的HTML樹非常大,那麼響應時間將會增加。爲了清理HTML樹,您應該確保無論用戶在FORM中輸入的內容是否合適,以及是否符合期望值。
您可以訪問www.owasp.org以瞭解有關如何避免XSS攻擊的更多信息。該站點爲您提供了可能的備忘單,以確保您的HTML樹不受任何XSS攻擊。
ASP.NET HttpUtility.Htmlencode()爲您提供。 但是,如果你想阻止危險的腳本,首先不要插入它到您的數據庫。首先,在插入數據庫之前清理HTML文本。
我發現了一類是爲你做它:http://eksith.wordpress.com/2012/02/13/antixss-4-2-breaks-everything/
它工作正常,你可以添加新的標籤和屬性的消毒劑定製的白名單。
注意:Microsoft Sanitizer和Anti-XSS Library對我無用。也許你也可以嘗試一下。
我發現這對於清理WYSIWYG輸入來說過於激進。鏈接被拆分爲。 –
但是如果您在談論允許HTML標記,那麼AntiXss編碼不是您想要的,是嗎?這將轉換,如到< a &rt;(即,編碼它,所以它不再是一個HTML標記)。 – McGarnagle
正確 - 我不想要AntiXss編碼。但是,AntiXss庫包含清理庫。但是,4.2版似乎「打破了一切」。此鏈接在StackOverflow鏈接到很多有用的東西:http://stackoverflow.com/questions/3959136/antixss-htmlencode-vs-antixss-getsafehtmlfragment包括這個解決方法,它是使用白名單(你可以自己定製它)清潔:http://eksith.wordpress.com/2012/02/13/antixss-4-2-breaks-everything/ –