我刚刚回答了一个问题,并提出了一个答案,建议使用AntiXss库以避免跨站点脚本。听起来很有意思,阅读msdn blog,似乎只提供了一个HtmlEncode()方法。但我已经使用了HttpUtility.HtmlEncode()。
为什么我要在HttpUtility.HtmlEncode上使用AntiXss.HtmlEncode? strong>
确实,我不是第一个提出这个问题的人。事实上,谷歌出现了some answers,主要是
嗯,这很好,但这对我意味着什么?我不太关心0.1ms的性能,我真的不想下载并添加另外的库依赖项来实现我已经拥有的功能。
是否存在AntiXss实施可以防止HttpUtility实施不会发生攻击的案例?
如果我继续使用HttpUtility实施,我是否有风险?那么this 'bug'呢?
答案 0 :(得分:31)
我没有专门针对你的问题的答案,但我想指出白名单与黑名单的方法不仅仅是“好”。这一点很重要。很重要。在安全方面,每件小事都很重要。请记住,使用跨站点脚本和cross-site request forgery,即使您的网站没有显示敏感数据,黑客也可以通过注入javascript来感染您的网站,并使用它来从其他网站获取敏感数据。所以做对是至关重要的。
OWASP guidelines specify using a white list approach。 PCI合规性指南也在编码标准中指明了这一点(因为它们引用了OWASP指南)。
此外,较新版本的AntiXss库有一个很好的新功能:.GetSafeHtmlFragment(),它适用于您希望在数据库中存储HTML并将其作为HTML显示给用户的情况。
另外,对于“bug”,如果您正确编码并遵循所有安全准则,则使用参数化存储过程,因此单引号将被正确处理,如果您编码不正确,没有现成的库可以完全保护你。 AntiXss库旨在成为一种可以使用的工具,而不是知识的替代品。依靠图书馆为你做的就是期待一个非常好的画笔,在没有优秀艺术家的情况下制作好的画作。
修改 - 添加
正如问题所述,反xss将保护你和HttpUtility的例子不会:
HttpUtility.HtmlEncode and Server. HtmlEncode do not prevent Cross Site Scripting
但是,根据作者的说法。我没有亲自测试过。这听起来好像是你的安全指南,所以这可能不是我需要告诉你的事情,但是如果一个经验不足的开发人员在那里阅读这个,我说白名单的原因这个方法至关重要。
现在,今天,HttpUtility.HtmlEncode可以成功阻止每次攻击,只需删除/编码<
和>
,加上一些其他“已知可能不安全”的角色,但有人是总是试图想出新的闯入方式。仅仅考虑已知安全(白名单)内容要比想到攻击者可能向你投掷的每一个可能不安全的输入点(黑名单方法)容易得多。
答案 1 :(得分:12)
就你为何使用其中一个而言,考虑到AntiXSS库比ASP.NET框架更频繁地发布 - 因为正如David Stratton所说'有人总是试图想出新的破解方式在',当有人提出一个时,AntiXSS库更有可能获得更新版本以防御它。
答案 2 :(得分:8)
以下是Microsoft.Security.Application.AntiXss.HtmlEncode
和System.Web.HttpUtility.HtmlEncode
方法之间的差异:
Anti-XSS使用白名单技术(有时也称为包含原则)来提供针对跨站点脚本(XSS)攻击的保护。此方法首先定义有效或允许的字符集,并对此集合之外的任何内容进行编码(无效字符或潜在攻击)。 System.Web.HttpUtility.HtmlEncode
和该命名空间中的其他编码方法使用排除原则,并仅编码指定为潜在危险的某些字符,例如&lt;,&gt;,&amp;和'人物。
Anti-XSS Library的白色(或安全)字符列表支持十几种语言(希腊语和科普特语,西里尔语,西里尔语补充语,亚美尼亚语,希伯来语,阿拉伯语,叙利亚语,阿拉伯语补充,Thaana,NKo和更多)
Anti-XSS库专门用于缓解XSS攻击,而HttpUtility
编码方法的创建是为了确保ASP.NET输出不会破坏HTML。
性能 - AntiXss.HtmlEncode()
和HttpUtility.HtmlEncode()
之间的平均增量为每个事务+0.1毫秒。
Anti-XSS 3.0版提供了一个测试工具,允许开发人员同时运行XSS验证和性能测试。
答案 3 :(得分:5)
大多数XSS漏洞(实际上是任何类型的漏洞)完全基于现有安全性并未“预期”某些事情发生的事实。默认情况下,仅白名单方法更容易处理这些方案。
答案 4 :(得分:3)
我们对Microsoft的Windows Live网站使用白名单方法。我确信我们还没有想到任何数量的安全攻击,所以我对偏执方法更加满意。我怀疑有些黑名单暴露了白名单没有的漏洞,但我无法告诉你细节。