.NET HTML白名单(反xss /跨站点脚本)

Cly*_*yde 5 .net xss whitelist

我有一个常见的情况,我有用户输入使用HTML的子集(输入tinyMCE).我需要一些针对XSS攻击的服务器端保护,并且我正在寻找一个经过充分测试的工具,人们正在使用它来做这件事.在PHP方面,我看到许多像HTMLPurifier这样的库可以完成这项工作,但我似乎无法在.NET中找到任何东西.

我基本上是在寻找一个库来过滤到标签的白名单,这些标签上的属性,并使用"href"和"img:src"等"难"属性做正确的事情.

我在http://refactormycode.com/codes/333-sanitize-html上看过Jeff Atwood的帖子,但我不知道它是最新的.它对网站目前使用的内容有什么影响吗?无论如何,我不确定我是否对尝试重新输出有效输入的策略感到满意.

这篇博客文章列出了一个看起来更具吸引力的策略:

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?我错过了其他重要的东西吗?

我不想在这里重新实现一个车轮.当然有一些常用的库.有任何想法吗?

Jul*_*ian 5

我们正在使用HtmlSanitizer .Net 库,它:

也在NuGet 上


blo*_*art 3

如果您想要解析,并且担心传入无效的 (x)HTML,那么HTML Agility Pack可能是用于解析的最佳选择。请记住,虽然它不仅仅是元素,还需要允许的元素上的属性(当然,您应该使用允许的元素及其属性的白名单,而不是尝试通过黑名单删除可能不可靠的内容)

还有OWASP AntiSamy 项目,该项目正在进行中 - 他们还有一个测试站点,您可以尝试 XSS

在我看来,正则表达式可能风险太大。