为什么HTML编码会阻止某些XSS攻击?

时间:2011-12-12 13:47:45

标签: html xss

我一直在阅读你在从服务器回到客户端的路上进行HTML编码(我认为?),这样可以防止多种类型的XSS攻击。但是,我根本不明白。浏览器仍然会消耗和呈现HTML吗?

这是怎么阻止的?

我已经在多个地点,网站和图书中了解到这一点,并且它实际上无法解释为什么这样做。

2 个答案:

答案 0 :(得分:11)

想一想:编码 HTML看起来像什么?例如,它可能如下所示:

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

因此它将作为文字呈现在客户端上(如< a href =“www.stackoverflow.com”>),而不是HTML。这意味着你不会看到实际的链接,而是代码本身。

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

XSS当然比这更精细,并且通常也涉及JavaScript(因此跨站点脚本),但出于演示目的,这个简单的示例应该足够了;它与JavaScript代码和简单的HTML标记相同,因为XSS是更一般的HTML注入的特例。

答案 1 :(得分:1)

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

转换的基本实体是:

  • &&amp;
  • <&lt;
  • >&gt;
  • "&quot;

OWASP recommends encoding some additional characters

  • '&#x27;
  • /&#x2F;

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