我没有专门针对您的问题的答案,但我想指出白名单与黑名单的方法不仅仅是“好”。这一点很重要。很重要。在安全方面,每一件小事都很重要。请记住,使用跨站点脚本和跨站点请求伪造,即使您的站点没有显示敏感数据,黑客也可以通过注入 javascript 来感染您的站点,并使用它从另一个站点获取敏感数据。因此,正确地做是至关重要的。
OWASP 指南指定使用白名单方法。PCI 合规性指南也在编码标准中指定了这一点(因为它们参考了 OWASP 指南)。
此外,较新版本的 AntiXss 库有一个不错的新功能:.GetSafeHtmlFragment(),这对于您希望将 HTML 存储在数据库中并将其作为 HTML 显示给用户的情况非常有用。
此外,对于“错误”,如果您正确编码并遵循所有安全准则,则您使用的是参数化存储过程,因此单引号将被正确处理,如果您没有正确编码,则不书架图书馆将全面保护您。AntiXss 库旨在成为一种使用工具,而不是知识的替代品。依靠图书馆为您做正确的事情,您会期望一个非常好的画笔在没有好的艺术家的情况下制作出好的画作。
编辑 - 添加
正如问题中所问的,反 xss 将保护您而 HttpUtility 不会保护您的示例:
HttpUtility.HtmlEncode 和服务器。HtmlEncode 不会阻止跨站点脚本
不过,这是作者的说法。我没有亲自测试过。
听起来您已经遵守了安全准则,所以这可能不需要我告诉您,但以防万一没有经验的开发人员在那里阅读本文,我说白名单方法至关重要的原因这是。
现在,今天,HttpUtility.HtmlEncode 可以成功阻止所有攻击,只需删除/编码<
和>
,加上一些其他“已知的潜在不安全”字符,但总有人试图想出新的闯入方式。只允许已知安全(白名单)内容比尝试考虑攻击者可能向您抛出的每一个可能的不安全输入(黑名单方法)要容易得多。