Microsoft Anti-Cross Site Scripting Library

微软反跨站脚本库(AntiXSS)是一个开源的编码库,旨在帮助开发人员避免他们基于ASP.NET Web的应用程序受到XSS攻击,并且就安全性而言,它提供了比 ASP.NET 附带的编码器更好的 HTML 编码器。 并不是说 Server.HtmlEncode 有什么问题,只是它侧重于兼容性而不是安全性。

AntiXSS 使用不同的方法进行编码,它使用了白名单技术。这种方法首先定义一个有效的字符集,编码这个字符集之外的代码(无效的字符或潜在的攻击任何东西)。白名单的方法提供了比其他编码方案的优点是性能。

 

对于ASP.NET来说,微软提供了ValidateRequest机制来检查有害内容,防止XSS攻击。ValidateRequest的默认值为true。当用户试图用<xxxx>之类的输入影响页面返回结果的时候,会引发一个 HttpRequestValidationExceptioin。有些程序员看到抛了这个异常信息的页面后,想也不想就把ValidateRequest设为false。这样做是非常危险的,也跟微软的良苦用心背道而驰。正常情况下,应该在程序中捕获这个异常并处理,比如提示用户友好信息、调整到相应错误页面等等。可以在Application_Error事件或利用httpModule等方法来处理此异常。

对于一些情况下,用户必须要能够输入html代码,比如新闻发布系统,这时候才应该把ValidateRequest设为false,而且也应该在需要的相关页面把ValidateRequest设为false,而不是直接全局设为false。那么这种情况下如何防止XSS攻击呢?

这时候上面提到的AntiXSS Library就有了用武之地。

对于用户输入,可以调用GetSafeHtmlFragment / GetSafeHtml来消除html代码的有害部分。

对于那些允许输入html 标记的,但是显示出来就是当初用户输入的功能,在显示数据的时候需要调用HtmlEncode方法来防止XSS攻击。

 

参考资料:
How To: Prevent Cross-Site Scripting in ASP.NET
推薦使用 Microsoft Anti-Cross Site Scripting Library V3.0
推薦使用 Microsoft Anti-Cross Site Scripting Library v3.1
Using AntiXss As The Default Encoder For ASP.NET

原创文章,转载请注明: 转载自闲云博客

本文链接地址: Microsoft Anti-Cross Site Scripting Library

发表评论

电子邮件地址不会被公开。 必填项已用*标注