【问题标题】:Why does HTML encoding prevent certain XSS attacks?为什么 HTML 编码可以防止某些 XSS 攻击?
【发布时间】:2011-12-12 13:47:44
【问题描述】:

我一直在读到您在从服务器返回客户端的途中进行了 HTML 编码(我认为?),这将防止多种类型的 XSS 攻击。然而,我完全不明白。 HTML 仍然会被浏览器消费和呈现,对吧?

这如何阻止任何事情?

我在多个地点、网站和书籍中都读到过这方面的内容,但它实际上并没有解释为什么它有效。

【问题讨论】:

  • 我不确定为什么有人会否决这个问题。这对我来说似乎足够合理。此外,重要的是要充分了解 Web 漏洞的工作原理,以便避免这些漏洞。

标签: html xss


【解决方案1】:

想一想:编码 HTML 是什么样的?例如,它可能如下所示:

<a href="www.stackoverflow.com">

因此它将在客户端呈现为文字(如 ),而不是 HTML。这意味着您不会看到实际链接,而是代码本身。

XSS 攻击的工作原理是,有人可以让客户端浏览器解析网站提供者不打算出现的 HTML;如果上述内容未编码,则意味着所提供的链接将嵌入网站中,尽管网站提供者不希望这样做。

XSS 当然比这要复杂一些,而且通常也涉及到 JavaScript(因此是跨站点 Scripting),但出于演示目的,这个简单的示例就足够了; JavaScript 代码和简单的 HTML 标记一样,因为 XSS 是更一般的 HTML 注入的特例。

【讨论】:

  • 哦!现在这是有道理的。所以浏览器不会将它呈现为 HTML。我在 ASP.NET MVC 以及它如何使用 HTML 编码的上下文中,并认为它将它用于它打算显示的实际 HTML。现在我知道它只是在参考值时使用它。
【解决方案2】:

HTML 编码将<div> 转换为<div>,这意味着任何 HTML 标记都将作为文本显示在页面上,而不是作为 HTML 标记执行。

被转换的基本实体是:

  • &&
  • <<
  • >>
  • ""

OWASP recommends encoding some additional characters:

  • ''
  • //

这些编码是您以文本方式表示字符的方式,否则这些字符将被用作标记。如果您想编写a<b,则必须小心<b 不会被视为HTML 元素。如果您使用a<b,将向用户显示的文本将为a<b

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多