【问题标题】:Cross Site Scripting and HTML Encoding跨站点脚本和 HTML 编码
【发布时间】:2010-09-18 09:55:22
【问题描述】:

如果我在重新显示网站用户输入的任何数据时对其进行 HTML 编码,这会防止 CSS 漏洞吗?

另外,是否有可用的工具/产品可以为我清理用户输入,这样我就不必编写自己的例程了。

【问题讨论】:

标签: asp.net xss html-encode


【解决方案1】:

这个问题有很多微妙之处,尽管答案通常是肯定的。

  • 您网站的安全性在很大程度上取决于您将数据放在哪里。如果你把它作为合法文本,攻击者基本上没有办法执行 XSS。如果你把它放在一个属性中,如果你忘记转义引号或者不检查多字节格式是否正确,你就有可能受到攻击。如果将它放在 JSON 变量中,则不正确转义可能会导致任意 JavaScript。等等等等。上下文很重要。

  • 其他用户建议使用 XSS 删除或 XSS 检测功能。我倾向于认为 XSS 删除对用户不友好;如果我发布了一个像 这样的电子邮件地址,而您的删除 XSS 函数认为它是一个 HTML 标签,那么这个文本就会神秘地消失。如果我正在运行一个 XSS 论坛,我不希望人们的示例代码被删除。检测更明智一些;如果您的应用程序可以判断何时有人在攻击它,它可以禁止 IP 地址或用户帐户。但是,您应该小心使用这种功能;无辜者可以而且将会陷入交火。

  • 验证是网站逻辑的重要组成部分,但它也独立于转义。如果我不验证任何东西而逃避一切,就不会有 XSS 攻击,但有人可以说他们的生日是“音乐死去的那一天”,应用程序不会更聪明。理论上,对某些数据类型进行足够严格的验证可以执行转义的所有职责(想想数字、枚举等),但无论如何逃避它们是深度防御的一般良好做法。即使你是 100%,它也是一个整数。可能不是。

  • 转义明文是一个小问题;如果您的语言没有为您提供函数,则使用相应的 HTML 实体替换 <>"'& 的字符串即可解决问题。 (仅当您不使用 UTF-8 时才需要其他 HTML 实体)。允许使用 HTML 标记并非易事,值得提出自己的 Stack Overflow 问题。

【讨论】:

    【解决方案2】:

    对 HTML 进行编码只是一个开始……它并不能防止所有 XSS 攻击。

    如果您使用 PHP,这里有一个很好的功能可以在您的网站中使用:Kallahar's RemoveXSS() function

    如果你不使用 PHP,至少代码有很好的注释,解释每个部分的目的,然后可以适应另一种编程语言。

    【讨论】:

    【解决方案3】:

    答案是否定的,编码是不够的。对 XSS 的最佳保护是对所有传入数据的“白名单”验证和对所有输出数据的适当编码的组合。验证允许检测攻击,编码防止任何成功的脚本注入在浏览器中运行。如果您使用的是 .NET,您可以查看此库 http://msdn.microsoft.com/en-us/library/aa973813.aspx

    您还可以查看一些备忘单来测试您的保护:http://ha.ckers.org/xss.html

    问候,

    维克多

    【讨论】:

      【解决方案4】:

      HtmlEncoding 输入通过不允许 HTML 呈现到页面为您提供了很大一部分。

      根据您的语言,应该存在项目以清理数据。在 .NET 中,您可以使用 Server.HtmlEncode(txtInput.Text) 从名为 txtInput 的文本框输入数据。

      正如其他人所提到的,需要真正保护更多项目。

      【讨论】:

      • 他指的是 XSS/跨站脚本中的 CSS,而不是级联样式表
      猜你喜欢
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 2014-01-27
      • 2011-02-24
      • 1970-01-01
      相关资源
      最近更新 更多