我只是碰到一个问题,跑了一个答案暗示AntiXss库,以避免交叉站点脚本。 听起来很有意思,看完MSDN博客 ,这似乎只是提供的HTMLEncode()方法。 不过,我已经使用HttpUtility.HtmlEncode()。
我为什么要使用AntiXss.HtmlEncode超过HttpUtility.HtmlEncode?
事实上,我不是第一个问这个问题。 而且,事实上,谷歌变成了一些 答案 ,主要是
- 白名单,而不是黑名单的方法
- 一个0.1ms的性能改进
嗯,这是很好的,但是这是什么意思给我吗? 我不那么在乎为0.1ms的表现,我不觉得自己真的要下载并添加另一个库的依赖了,我已经拥有的功能。
在那里的AntiXss实施将防止出现HttpUtility实现不会攻击的情况下的例子吗?
如果我继续使用HttpUtility实现,我是在风险? 怎么样这个“错误” ?
我没有回答具体到你的问题,但我想指出的是,白名单VS黑名单做法不只是“好”。 这一点很重要。 很重要。 当涉及到安全性,每一件小事是非常重要的。 请记住,跨站点脚本和跨站请求伪造 ,即使你的网站没有出现敏感数据,黑客可以通过注入的JavaScript感染你的网站,并用它来从其他网站获取敏感数据。 所以这样做是正确是至关重要的。
OWASP准则规定使用白名单的方式 。 PCI合规指南还编码标准规定了这一点(因为它们是指托特他OWASP指南)。
此外,AntiXss库的新版本有一个不错的新功能:.GetSafeHtmlFragment(),这是您要保存HTML数据库,并将它显示给用户的HTML这些情况不错。
此外,作为“错误”,如果你正确的编码和之后所有的安全准则,你使用参数化存储过程,因此单引号将被正确处理,如果你没有正确的编码,没有关闭货架库即将全面保护你。 该AntiXss库,就是要一个工具来使用,而不是知识的替代品。 依托图书馆做适合你会期待一个真正的好画笔转出良好的画作没有一个好的艺术家。
编辑-添加
正如在问这个问题,这里的防XSS会保护你的例子,HttpUtility不会:
HttpUtility.HtmlEncode和服务器。 的HTMLEncode不防跨站脚本
根据笔者这就是,虽然。 我没有亲自测试过。
这听起来像你对你的安全准则已经起来了,所以这可能不是什么我要告诉你,但万一一个经验不足的开发者那里读这篇文章,我之所以说白名单的方法是关键这是。
现在,今天,HttpUtility.HtmlEncode可以成功阻止每一次攻击在那里,只需将其取出/编码<
和>
,加上其他一些“知可能不安全”字,但有人总是试图想打破的新途径。只允许已知安全的(白名单)含量比试图想输入的每一个可能的不安全位的攻击者可以可能抛出你(黑名单的做法)容易得多。
在为什么要使用一个比其他条款,认为AntiXSS库的发布得到更多的往往比ASP.NET框架 - 因为,正如大卫·斯特拉顿说:“有人总是试图想打破的新途径”,当有人不拿出一个AntiXSS库更容易获得更新的版本来抵御它。
The following are the differences between Microsoft.Security.Application.AntiXss.HtmlEncode
and System.Web.HttpUtility.HtmlEncode
methods:
Anti-XSS uses the white-listing technique, sometimes referred to as the principle of inclusions, to provide protection against Cross-Site Scripting (XSS) attacks. This approach works by first defining a valid or allowable set of characters, and encodes anything outside this set (invalid characters or potential attacks). System.Web.HttpUtility.HtmlEncode
and other encoding methods in that namespace use principle of exclusions and encode only certain characters designated as potentially dangerous such as <, >, & and ' characters.
The Anti-XSS Library's list of white (or safe) characters support more than a dozen languages (Greek and Coptic, Cyrillic, Cyrillic Supplement, Armenian, Hebrew, Arabic, Syriac, Arabic Supplement, Thaana, NKo and more)
Anti-XSS library has been designed specially to mitigate XSS attacks whereas HttpUtility
encoding methods are created to ensure that ASP.NET output does not break HTML.
Performance - the average delta between AntiXss.HtmlEncode()
and HttpUtility.HtmlEncode()
is +0.1 milliseconds per transaction.
Anti-XSS Version 3.0 provides a test harness which allows developers to run both XSS validation and performance tests.
大多数的XSS漏洞(任何类型的漏洞,实际上)是一个事实,即现有的安全没有“预期”某些事情的发生完全基于。 白名单,只有方法更倾向于默认来处理这些情况。
我们使用微软的Windows Live网站的白名单的做法。 我敢肯定,有任意数量的,我们没有考虑过的安全攻击,让我更舒服的偏执做法。 我怀疑有过在黑名单暴露的漏洞,白名单也没有的情况下,但我不能告诉你详情。
文章来源: What is the difference between AntiXss.HtmlEncode and HttpUtility.HtmlEncode?