我一直在閱讀你在從服務器到客戶端的路上的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