如果我在重新显示网站用户输入的任何数据时对其进行 HTML 编码,这会防止 CSS 漏洞吗?
此外,是否有可用的工具/产品可以为我清理我的用户输入,这样我就不必编写自己的例程了。
如果我在重新显示网站用户输入的任何数据时对其进行 HTML 编码,这会防止 CSS 漏洞吗?
此外,是否有可用的工具/产品可以为我清理我的用户输入,这样我就不必编写自己的例程了。
这个问题有各种微妙之处,尽管总体上答案是肯定的。
您网站的安全性在很大程度上取决于您将数据放在哪里。如果你把它作为合法文本,攻击者基本上没有办法执行 XSS。如果你把它放在一个属性中,如果你忘记转义引号或者不检查多字节格式是否正确,你就有可能受到攻击。如果将它放在 JSON 变量中,则不正确转义可能会导致任意 JavaScript。等等等等。上下文非常重要。
其他用户建议使用 XSS 删除或 XSS 检测功能。我倾向于认为 XSS 删除对用户不友好;如果我发布了一个像 <foo@example.com> 这样的电子邮件地址,而您的删除 XSS 函数认为它是一个 HTML 标记,那么这个文本就会神秘地消失。如果我正在运行一个 XSS 论坛,我不希望人们的示例代码被删除。检测更明智一些;如果您的应用程序可以判断何时有人在攻击它,它可以禁止 IP 地址或用户帐户。但是,您应该小心使用这种功能;无辜者可以而且将会陷入交火。
验证是网站逻辑的重要组成部分,但它也独立于转义。如果我不验证任何东西而逃避一切,就不会有 XSS 攻击,但有人可以说他们的生日是“音乐死去的那一天”,应用程序不会更聪明。理论上,对某些数据类型进行足够严格的验证可以执行转义的所有职责(想想数字、枚举等),但无论如何逃避它们是深度防御的一般良好做法。即使你是 100%,它也是一个整数。可能不是。
转义明文是一个小问题;如果你的语言没有给你一个函数,一个字符串替换<
, >
, "
,'
和&
它们对应的 HTML 实体就可以了。(仅当您不使用 UTF-8 时才需要其他 HTML 实体)。允许 HTML 标记并非易事,值得拥有自己的 Stack Overflow 问题。
通过不允许 HTML 呈现到页面,HtmlEncoding 输入为您提供了很大的帮助。
根据您的语言项目应该存在那里清理数据。在 .NET 中,您可以使用 Server.HtmlEncode(txtInput.Text) 从名为 txtInput 的文本框输入数据。
正如其他人所提到的,需要真正保护更多物品。
编码您的 HTML 是一个开始……它并不能防止所有 XSS 攻击。
如果你使用 PHP,这里有一个很好的函数可以在你的站点中使用:Kallahar 的 RemoveXSS() 函数
如果你不使用 PHP,至少代码有很好的注释,解释了每个部分的目的,然后可以适应另一种编程语言。
答案是否定的,编码是不够的。对 XSS 的最佳保护是对所有传入数据的“白名单”验证和对所有输出数据的适当编码的组合。验证允许检测攻击,编码防止任何成功的脚本注入在浏览器中运行。如果您使用的是 .NET,您可以查看此库http://msdn.microsoft.com/en-us/library/aa973813.aspx
您还可以查看一些备忘单来测试您的保护:http ://ha.ckers.org/xss.html
问候,
胜利者