2011-12-12 79 views
6

我一直在阅读你在从服务器到客户端的路上的HTML编码(我认为?),这将防止许多类型的XSS攻击。但是,我根本不明白。 HTML仍然会被浏览器消耗和渲染吗?为什么HTML编码会阻止某些XSS攻击?

这是什么阻止什么?

我在多个位置,网站和书籍上阅读过这篇文章,但实际上并没有解释这个问题为什么这个工作。

+1

我不确定为什么有人会低估这个问题。这对我来说似乎足够合理。此外,重要的是要充分了解网络漏洞的工作方式,以便避免这些漏洞。 – zzzzBov

回答

10

想一想:编码为 HTML是什么样的?例如,它可能看起来像这样:

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

因此,将客户的文字上呈现(如< A HREF =“www.stackoverflow.com” >),而不是HTML。意思是你不会看到一个实际的链接,而是代码本身。

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

XSS当然比这更精致一些,通常还包含JavaScript(因此跨站点脚本),但出于演示的目的,此简单示例应该足够了; JavaScript代码和简单的HTML代码一样,因为XSS是更一般的HTML注入的特例。

+1

哦!这现在有道理。所以浏览器*不会将其呈现为HTML。我是在ASP.NET MVC的上下文中,以及它如何使用HTML编码,并且认为它正在将它用于它打算显示的实际HTML。现在我明白它只是用它来引用值。 – BigOmega

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