我刚刚遇到了一个问题,并给出了一个答案,建议AntiXss库避免跨站点脚本编写。读msdn博客听起来很有趣,它似乎只是提供了一个HtmlEncode()方法。但是我已经使用了HttpUtility.HtmlEncode()。
为什么我想使用AntiXss.HtmlEncode而不是HttpUtility.HtmlEncode?
事实上,我并不是第一个提出这个问题的。事实上,Google出现了一些 答案,主要是
很好,但这对我意味着什么?我不太关心0.1ms的性能,我也不太想下载并为我已经拥有的功能添加另一个库依赖项。
是否有AntiXss实现可以防止HttpUtility实现不会发生的攻击的例子?
如果我继续使用HttpUtility实现,我是否面临风险?那这个‘臭虫’呢
发布于 2009-10-22 17:58:53
我对你的问题没有具体的答案,但我想指出的是,白名单与黑名单的做法并不仅仅是“很好”。这很重要。非常重要。说到安全,每件小事都很重要。请记住,使用跨站点脚本和跨站点请求伪造,即使您的站点没有显示敏感数据,黑客也可能通过注入javascript来感染您的站点,并使用它从另一个站点获取敏感数据。所以做好这件事是至关重要的。
使用白名单方法指定OWASP指南。PCI法规指南还在编码标准中指定了这一点(因为它们指的是OWASP准则)。
另外,较新版本的AntiXss库有一个很好的新函数:.GetSafeHtmlFragment(),这对于您希望在数据库中存储HTML并将其显示为HTML的情况很好。
另外,至于"bug",如果您编码正确,并且遵循所有的安全准则,那么您使用的是参数化存储过程,因此单引号将被正确地处理,如果您没有正确地编码,则没有现成的库将完全保护您。AntiXss库是用来作为工具使用的,而不是知识的替代品。依靠图书馆来做好这件事,你就会期待一支真正好的画笔在没有好的艺术家的情况下画出好画。
编辑添加的
正如在这个问题中所问的,一个关于抗xss将保护您和HttpUtility的示例不会:
HttpUtility.HtmlEncode和服务器。HtmlEncode不阻止跨站点脚本编写
不过,这是作者说的。我还没亲自测试过呢。
听起来你已经掌握了你的安全指南,所以这可能不是我需要告诉你的事情,但是万一一个没那么有经验的开发人员读到了这篇文章,我说白名单方法很关键的原因就是这个。
现在,HttpUtility.HtmlEncode可能成功地阻止了所有的攻击,只需删除/编码<
和>
,再加上其他几个“已知的潜在不安全”字符,但总会有人想出新的入侵方式。只允许已知的安全(白名单)内容比试图考虑攻击者可能向您抛出的每一个可能不安全的输入(黑名单方法)要容易得多。
发布于 2009-10-23 13:50:34
关于为什么您会使用一个而另一个,考虑到AntiXSS库比ASP.NET框架更频繁地发布--因为,正如David所说的,‘有人总是试图想出新的方法来破解’,当有人想出一个新的方法时,AntiXSS库更有可能得到一个更新的版本来抵御它。
发布于 2011-07-29 06:41:04
以下是Microsoft.Security.Application.AntiXss.HtmlEncode
和System.Web.HttpUtility.HtmlEncode
方法之间的区别:
System.Web.HttpUtility.HtmlEncode
和其他编码方法使用排除原则,只对指定为潜在危险的某些字符进行编码,例如<、>和‘字符。HttpUtility
编码方法是为了确保ASP.NET输出不会破坏HTML。AntiXss.HtmlEncode()
和HttpUtility.HtmlEncode()
之间的平均增量是每个事务的+0.1毫秒。https://stackoverflow.com/questions/1608854
复制相似问题