AntiXss.HtmlEncode和HttpUtility.HtmlEncode有什么区别?

我只是碰到了一个问题,提供了一个答案,build议AntiXss库避免跨站点脚本。 听起来有趣,阅读msdn博客 ,它似乎只提供一个HtmlEncode()方法。 但是我已经使用HttpUtility.HtmlEncode()。

为什么我想要通过HttpUtility.HtmlEncode使用AntiXss.HtmlEncode?

事实上,我不是第一个问这个问题的。 而且,Google的确主要提供了一些 答案

  • 白名单而不是黑名单的方法
  • 性能提升0.1毫秒

那很好,但这对我意味着什么? 我不关心0.1ms的性能,我真的不觉得像我已经有的function下载和添加另一个库依赖项。

AntiXss实现是否会阻止HttpUtility实现不会执行的攻击?

如果我继续使用HttpUtility实现,我是否有风险? 这个“错误”呢?

我没有一个专门针对你的问题的答案,但我想指出,白名单与黑名单方法不仅仅是“好”。 这一点很重要。 很重要。 当谈到安全时,每一件小事都很重要。 请记住,通过跨站点脚本和跨站点请求伪造 ,即使您的站点没有显示敏感数据,黑客也可能通过注入javascript来感染您的站点,并使用它从另一个站点获取敏感数据。 所以做对是至关重要的。

OWASP准则使用白名单方法来指定 。 PCI合规指南也在编码标准中对此进行了说明(因为它们是指OWASP指南)。

此外,AntiXss库的更新版本还有一个很好的新function:.GetSafeHtmlFragment(),这对于要在数据库中存储HTML并将其作为HTML显示给用户的情况非常有用。

此外,对于“错误”,如果编码正确并遵循所有安全性准则,则使用参数化的存储过程,因此单引号将被正确处理。如果编码不正确,书架库将会保护你。 AntiXss库的目的是成为一个工具,而不是知识的替代品。 依靠图书馆来做这件事,你会期待一个非常好的画笔,把没有一个好的艺术家的好画画出来。

编辑 – 添加

正如问题中所提到的,反xss将保护您和HttpUtility的示例不会:

HttpUtility.HtmlEncode和Server。 HtmlEncode不会阻止跨站点脚本

这是根据作者,虽然。 我没有亲自testing过。


这听起来像是你的安全指导方针,所以这可能不是我需要告诉你,但以防万一有经验的开发者在外面读这个,我说白名单的方法是至关重要的这是。

现在,现在,HttpUtility.HtmlEncode可以通过删除/编码<> ,再加上其他一些“已知可能不安全”的字符,成功地阻止每一个攻击,但有人总是试图想出新的入侵方式。只允许已知安全的(白名单)内容比想像每个可能不安全的input的攻击者可能向你扔(黑名单的方法)要容易得多。

关于为什么要使用这个方法,考虑到AntiXSS库比ASP.NET框架更经常发布 – 因为正如David Stratton所说的“有人总是试图想出新的入侵方式”,当有人提出一个AntiXSS库时,更有可能得到一个更新的版本来抵御它。

以下是Microsoft.Security.Application.AntiXss.HtmlEncodeSystem.Web.HttpUtility.HtmlEncode方法之间的区别:

  1. 反XSS使用白名单技术(有时被称为包含原则)来提供针对跨站点脚本(XSS)攻击的保护。 这种方法的工作原理是首先定义一组有效的或允许的字符集,然后对该集以外的任何字符(无效字符或潜在的攻击)进行编码。 该名称空间中的System.Web.HttpUtility.HtmlEncode和其他编码方法使用排除原则,仅对指定为潜在危险的特定字符(如<,>,&和'字符)进行编码。

  2. 反XSS图书馆的白色(或安全)字符列表支持十多种语言(希腊语和科普特语,西里尔语,西里尔语补充语,亚美尼亚语,希伯来语,阿拉伯语,叙利亚语,阿拉伯语补充语,Thaana语,NKo语等)

  3. Anti-XSS库专为缓解XSS攻击而devise,而HttpUtility编码方法则用于确保ASP.NET输出不会中断HTML。

  4. 性能 – AntiXss.HtmlEncode()HttpUtility.HtmlEncode()之间的平均增量是每个事务+0.1毫秒。

  5. 反XSS版本3.0提供了一个testing工具,允许开发人员运行XSSvalidation和性能testing。

大多数XSS漏洞(实际上是任何types的漏洞)纯粹是基于现有安全性并不“期望”某些事情发生的事实。 只有白名单的方法默认情况下更适合处理这些情况。

我们使用Microsoft的Windows Live网站的白名单方法。 我敢肯定,还有一些我们还没有想到的安全攻击,所以我更喜欢偏执的方法。 我怀疑是否有黑名单暴露的白名单没有的漏洞,但我不能告诉你的细节。

Interesting Posts