-->

.NET HTML白名单(防XSS /跨站脚本)(.NET HTML whitelisting (a

2019-06-27 17:37发布

我已经得到了普遍的情况,我已经有了一个使用HTML的一个子集(TinyMCE的与输入)用户输入。 我需要有对XSS攻击一些服务器端的保护和正在寻找一个良好的测试工具,人们正在使用要做到这一点。 在PHP端我看到很多像HTMLPurifier该做的工作库,但我似乎无法找到任何.NET。

基本上,我在寻找一个库来筛选下来的标签白名单,对这些标记的属性,并做正确的事与“困难”的属性,如: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,那也不错。 如果没有,没什么大不了的 - 我可以因为用户应该使用TinyMCE的编辑器需要良好的HTML。 在这两种情况下,我重写我所知道的是安全的,结构良好的HTML。

问题是,这只是一个说明,没有一个链接到实际执行的是算法任何库。

难道这样的库是否存在? 如果不是这样,这将是一个很好的.NET HTML解析引擎? 而应该用什么正则表达式来执行额外的验证一:HREF,IMG:SRC? 我缺少的东西都重要吗?

我不想在这里再实现一个越野车车轮。 肯定有一些常用的库在那里。 有任何想法吗?

Answer 1:

那么,如果你想解析和你担心无效的(X)HTML在随后到来的HTML敏捷性包可能是用于分析的最好的事情。 但请记住它不只是要素,而且还对属性的元素让你需要允许(当然你应该努力元素的允许白名单和他们的属性,而不是试图通过黑名单剥夺的东西,可能是躲闪)

另外还有OWASP AntiSamy项目是在进步的正在进行的工作-他们也有一个测试网站 ,你可以尝试XSS

正则表达式这可能是太冒险了IMO。



Answer 2:

微软有一个开源库,以防止XSS: AntiXSS 。



Answer 3:

我们使用的是HtmlSanitizer NET库,其中:

  • 是开源
  • 积极维护
  • 不具备像微软反XSS库的问题 ,
  • 被单元与所述测试OWASP XSS过滤规避速查表
  • 特别是专为这个(与HTML敏捷性包 ,这是一个解析器)

也谈的NuGet



Answer 4:

http://www.microsoft.com/en-us/download/details.aspx?id=28589你可以在这里下载一个版本,但我挂它有用的DOCX文件。 我的首选方法是使用NuGet包管理器,以获得最新AntiXSS包。

您可以使用4.x的AntiXss库中找到的HtmlSanitizationLibrary组装。 需要注意的是GetSafeHtml()是在HtmlSanitizationLibrary,Microsoft.Security.Application.Sanitizer下。



Answer 5:

我有完全相同的问题在几年前,当我使用TinyMCE的。

目前似乎仍不是为.NET任何像样的XSS / HTML白名单的解决方案,所以我已上载我创建了一个解决方案,并已经使用了几年。

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

白名单defnintion是基于TinyMCE的的有效元素。

就拿二:环顾四周,微软最近发布了基于防XSS库(V3.0)白名单,检查出:

微软反跨站点脚本库V3.0(防XSS V3.0)是一种编码库,旨在帮助开发人员保护他们的基于Web的ASP.NET应用程序的XSS攻击。 它不同于它使用白名单技术最编码库 - 有时被称为夹杂物的原则 - 以提供保护,防止XSS攻击。 这种方法的工作原理是首先定义一个有效的或允许的字符集和编码这一组以外的任何东西(无效字符或潜在攻击)。 该白名单的方式比其他的编码方案有几个优点。 在此版本的Microsoft反跨站点脚本库的新功能包括: - 性能改进 - - 性能数据表(在线帮助中) - 支持更多语言的扩展白名单支持SHIFT_JIS编码为移动浏览器 - 一个示例应用程序 - 安全运行时引擎(SRE)HTTP模块



Answer 6:

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

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

微软Web保护图书馆(原AntiXSS)似乎只是淘汰了几乎所有的HTML标签,并从我读你不能轻松地定制的规则,你要使用的HTML子集。 所以,这不是我的选择。

这个HTML消毒剂也看起来非常有前途和将是我的第二选择。



文章来源: .NET HTML whitelisting (anti-xss/Cross Site Scripting)