我一直在阅读你在从服务器到客户端的路上的HTML编码(我认为?),这将防止许多类型的XSS攻击。但是,我根本不明白。 HTML仍然会被浏览器消耗和渲染吗?为什么HTML编码会阻止某些XSS攻击?
这是什么阻止什么?
我在多个位置,网站和书籍上阅读过这篇文章,但实际上并没有解释这个问题为什么这个工作。
我一直在阅读你在从服务器到客户端的路上的HTML编码(我认为?),这将防止许多类型的XSS攻击。但是,我根本不明白。 HTML仍然会被浏览器消耗和渲染吗?为什么HTML编码会阻止某些XSS攻击?
这是什么阻止什么?
我在多个位置,网站和书籍上阅读过这篇文章,但实际上并没有解释这个问题为什么这个工作。
想一想:编码为 HTML是什么样的?例如,它可能看起来像这样:
<a href="www.stackoverflow.com">
因此,将客户的文字上呈现(如< A HREF =“www.stackoverflow.com” >),而不是HTML。意思是你不会看到一个实际的链接,而是代码本身。
XSS攻击的工作原理是有人可以让客户端浏览器解析HTML,而该网站提供商并不打算将HTML放在那里;如果上面没有编码,这意味着提供的链接将被嵌入到网站中,尽管网站提供商不希望这样。
XSS当然比这更精致一些,通常还包含JavaScript(因此跨站点脚本),但出于演示的目的,此简单示例应该足够了; JavaScript代码和简单的HTML代码一样,因为XSS是更一般的HTML注入的特例。
哦!这现在有道理。所以浏览器*不会将其呈现为HTML。我是在ASP.NET MVC的上下文中,以及它如何使用HTML编码,并且认为它正在将它用于它打算显示的实际HTML。现在我明白它只是用它来引用值。 – BigOmega
HTML编码将<div>
转换为<div>
,这意味着任何HTML标记都将作为文本显示在页面上,而不是作为HTML标记执行。
被转换的基本实体是:
&
到&
<
到<
>
到>
"
到"
OWASP recommends encoding some additional characters:
'
到'
/
到/
这些编码是如何以文本表示,否则将被消耗掉标记字符。如果你想写a<b
,你必须小心,<b
不被视为一个HTML元素。如果使用a<b
,则将显示给用户的文本将为a<b
。
我不确定为什么有人会低估这个问题。这对我来说似乎足够合理。此外,重要的是要充分了解网络漏洞的工作方式,以便避免这些漏洞。 – zzzzBov