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

时间:2009-08-03 19:01:56

标签: .net xss whitelist

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

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

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

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

6 个答案:

答案 0 :(得分:3)

Microsoft有一个开源库来防范XSS:AntiXSS

答案 1 :(得分:3)

如果你想要解析,并且你担心无效的(x)HTML进来,那么HTML Agility Pack可能是用于解析的最好的东西。请记住,虽然它不仅仅是元素,而且还有你需要允许的允许元素的属性(当然你应该使用允许的元素及其属性的白名单,而不是尝试通过黑名单去除可能狡猾的东西)

还有OWASP AntiSamy Project这是一项正在进行中的工作 - 他们还有test site你可以尝试使用XSS

正则表达式可能是IMO风险太高。

答案 2 :(得分:3)

我们正在使用HtmlSanitizer .Net库,其中包含:

同样在NuGet

答案 3 :(得分:2)

http://www.microsoft.com/en-us/download/details.aspx?id=28589 您可以在此处下载某个版本,但我将其链接到有用的DOCX文件。我首选的方法是使用NuGet包管理器来获取最新的AntiXSS包。

您可以使用4.x AntiXss库中的HtmlSanitizationLibrary程序集。请注意,GetSafeHtml()位于Microsoft.Security.Application.Sanitizer下的HtmlSanitizationLibrary中。

答案 4 :(得分:1)

几年前,当我使用TinyMCE时,我遇到了完全相同的问题。

对于.Net似乎还没有任何像样的XSS / HTML白名单解决方案,所以我上传了一个我创建并已经使用了几年的解决方案。

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

白名单定义基于TinyMCE的有效元素。

拿两个: 环顾四周,微软最近发布了一个基于白名单的Anti-XSS Library(V3.0),检查出来:

  

Microsoft反跨站点   脚本库V3.0(Anti-XSS V3.0)   是一个设计用于的编码库   帮助开发者保护他们的ASP.NET   来自XSS的基于Web的应用程序   攻击。它与大多数编码不同   库中的它使用了   白名单技术 - 有时候   被称为原则   夹杂物 - 提供保护   反对XSS攻击。这种方法   通过首先定义有效或   允许的字符集,和   编码此集之外的任何内容   (无效的字符或潜在的   攻击)。白名单上市方法   提供了几个优点   编码方案。这方面的新功能   Microsoft Anti-Cross的版本   站点脚本库包括: - An   扩展的白名单,支持更多   语言 - 性能改进 -   性能数据表(在线   帮助) - 支持Shift_JIS编码   适用于移动浏览器 - 样本   应用程序 - 安全运行时引擎   (SRE)HTTP模块

答案 5 :(得分:0)

https://github.com/Vereyon/HtmlRuleSanitizer完全解决了这个问题。

在ASP.NET MVC应用程序中集成wysihtml5编辑器时遇到了这个挑战。我注意到它有一个非常漂亮但简单的基于白名单的清洁剂,它使用规则允许HTML的子集通过。我实现了它的服务器端版本,它依赖于HtmlAgility包进行解析。

Microsoft Web Protection Library(以前的AntiXSS)似乎只是简单地删除了所有HTML标记,从我读到的内容中,您无法轻松地将规则定制到您要使用的HTML子集。所以这对我来说不是一个选择。

HTML sanitizer看起来很有希望,也是我的第二选择。