2009-08-03 72 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也看起来很有前途,将是我的第二选择。