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

.NET HTML白名单(反xss/跨站点脚本),.net,xss,whitelist,.net,Xss,Whitelist,我有一种常见的情况,即用户输入使用HTML的子集(使用tinyMCE输入)。我需要一些服务器端保护来抵御XSS攻击,我正在寻找一个经过良好测试的工具,人们正在使用它来实现这一点。在PHP方面,我看到了很多像HTMLPurifier这样的库来完成这项工作,但我似乎在.NET中找不到任何东西 我基本上是在寻找一个库,以过滤到标签的白名单,这些标签上的属性,并用“困难”属性做正确的事情,如a:href和img:src 我在上看过杰夫·阿特伍德(Jeff Atwood)的帖子,但我不知道它有多新。它与站

我有一种常见的情况,即用户输入使用HTML的子集(使用tinyMCE输入)。我需要一些服务器端保护来抵御XSS攻击,我正在寻找一个经过良好测试的工具,人们正在使用它来实现这一点。在PHP方面,我看到了很多像HTMLPurifier这样的库来完成这项工作,但我似乎在.NET中找不到任何东西

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

我在上看过杰夫·阿特伍德(Jeff Atwood)的帖子,但我不知道它有多新。它与站点当前使用的内容有任何关系吗?在任何情况下,我都不确定我是否适合尝试regexp输出有效输入的策略

这篇博文展示了一个更具吸引力的策略:

这个方法实际上是将HTML解析成DOM,验证它,然后从中重建有效的HTML。如果HTML解析能够明智地处理格式错误的HTML,那就太好了。如果不是,那没什么大不了的——我可以要求格式良好的HTML,因为用户应该使用tinyMCE编辑器。在这两种情况下,我都在重写我所知道的安全、格式良好的HTML

问题是,这只是一个描述,没有指向任何实际执行该算法的库的链接

有这样的图书馆吗?如果不是,什么是好的.NETHTML解析引擎?应该使用什么正则表达式来执行额外的验证a:href,img:src?我是不是错过了什么重要的东西


我不想在这里重新安装一个小车轮子。肯定有一些常用的图书馆。有什么想法吗?

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

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

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

拿两个: 环顾四周,微软最近发布了一个基于白名单的反XSS库(V3.0),请查看:

微软反交叉网站 脚本库V3.0(反XSS V3.0) 是一个编码库,设计用于 帮助开发人员保护他们的ASP.NET 来自XSS的基于web的应用程序 攻击。它与大多数编码不同 库,因为它使用 白名单技术——有时 被称为 内含物——提供保护 针对XSS攻击。这种方法 首先定义一个有效的或 允许的字符集,以及 对该集合之外的任何内容进行编码 (无效字符或潜在错误) 攻击)。白名单办法 与其他方法相比,它提供了几个优点 编码方案。这方面的新特点 Microsoft Anti-Cross的版本 站点脚本库包括:- 扩展白名单,支持更多 语言-性能改进- 性能数据表(在线 帮助)-支持Shift_JIS编码 适用于移动浏览器-示例 应用程序安全运行时引擎 (SRE)HTTP模块


Microsoft有一个开源库来防止XSS:。

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

还有一个正在进行的工作-他们还有一个可以尝试XSS的

这方面的正则表达式在我看来可能太危险了。

您可以在这里下载一个版本,但我链接了它以获得有用的DOCX文件。我的首选方法是使用NuGet包管理器来获取最新的AntiXSS包

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

正好解决了这个问题

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

MicrosoftWebProtectionLibrary(以前的AntiXSS)似乎只是删除了几乎所有的HTML标记,从我读到的内容来看,您无法轻松地根据您想要使用的HTML子集定制规则。所以这不是我的选择

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

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

  • 它是开源的
  • 积极维护
  • 没有
  • 是否使用
  • 是为此专门构建的(与HTML Agility Pack相反,HTML Agility Pack是一个解析器)

同样在

上,AntiXSS只是编码,它不是一个剥离器或白名单解决方案(还没有),好的,谢谢。我自己也没用过,所以我可能应该坚持推荐我知道的东西。我想指出的是,在目前的形式下,这个库似乎很没用(见链接上的评论和评论),AntiXss确实带有白名单消毒剂。我正在使用它。@Brandon如何在AntiXss中向白名单添加内容?你能提供这个链接或样本吗?我尝试了一些谷歌搜索,但没有找到白名单的修改(agility pack就是我最后使用的。看起来效果不错