為啥進行html標籤編碼可以防止XSS?

2021-10-11 18:55:36 字數 1123 閱讀 8876

眾所周知,html字元編碼可以防止大部分的xss攻擊。一直以來有乙個疑問,為什麼對編碼解碼為後,不會進行對此標籤繼續進行解析呢?

一定有一些底層的原理來解釋這個問題。

解釋如下:

html解析器以狀態機的方式執行,它從文件輸入流中消耗字元並根據其轉換規則轉換到不同的狀態。

示例:

hello world

1、 初始狀態為"datastate",當遇到"",每個字元都附加到這個符號名上,例子中建立的是乙個 html 符號。

2、 當讀取到">",當前的符號就完成了,此時,狀態回到"data state",""重複這一處理過程。到這裡,html 和 body 標籤都識別出來了。現在,回到"data state",讀取"helloworld"中的字元"h"將建立並識別出乙個字元符號,這裡會為"hello world"中的每個字元 生成乙個字元符號。

3、 這樣直到遇到""中的""。然後,產生乙個新的標籤符號並回到"data state"。後面的""將和 ""一樣處理。

總結:當html 解析器處於資料狀態(datastate)、rcdata 狀態(rcdata state)、屬性值狀態(attribute value state)時,字元實體會被解碼為對應的字元。

示例:

《和》被編碼為字元實體《和》。 當 html 解析器解析完時,會進入資料狀態(data state)並發布標籤令牌。接著解析到實體《時因為處在資料狀態(data state)就會對實體進行解碼為

這裡會有個問題,被解碼後,img是否會被解析為 html 標籤而導致 js 執行呢?

答案是否定的。因為解析器在使用字元引用後不會轉換到標籤開啟狀態(tag openstate),不進入標籤開啟狀態就不會被發布為 html 標籤。因此,不會建立新 html 標籤, 只會將其作為資料來處理。 這也是為什麼我們可以使用字元實體來避免使用者不安全輸入導致 xss 的原因。

引自:深入**瀏覽器編碼及xss bypass

HTML文件標題標籤進行定義

標題 heading 是通過 注釋 瀏覽器會自動地在標題的前後新增空行。注釋 預設情況下,html 會自動地在塊級元素前後新增乙個額外的空行,比如段落 標題元素前後。請確保將 html heading 標籤只用於標題。不要僅僅是為了產生粗體或大號的文字而使用標題。搜尋引擎使用標題為您的網頁的結構和內...

Jsp中HTML標籤彙總與編碼事例

jsp中html標籤彙總與編碼事例 一 html簡介 html 超文字置標語言 是網路的通用語言,一種簡單 通用的全置標 記語言。它允許網頁製作人建立文字與相結合的複雜頁面,這些 頁面可以被網上任何其他人瀏覽到,無論使用的是什麼型別的電腦或 瀏覽器,你看到的就是這種語言寫的頁面.建立html頁面,你...

Html標籤顯示方式不同進行的分類

顯示方式不同進行的分類。典型代表 div,p,li,h1.特點 元素自己獨佔一行顯示 與寬度無關 可以設定寬度和高度 當巢狀乙個塊級元素,子元素如果不設定寬度,那麼該子元素的寬度為父元素的寬度。典型代表 span,a,font,strong.特點 元素在一行上顯示 不能直接設定寬度和高度 典型代表 ...