2011-12-12 78 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