轉義分為escapehtml和unescapehtml,先看兩個函數的實現。
js代碼。
/**。
* @function escapehtml 轉義html腳本 <>&"'。
* @param a -。
* 字符串。
*/。
escapehtml:function(a){
a、quot;"+ a
return a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")。
}
/**。
* @function unescapehtml 還原html腳本 <>&"'。
* @param a -。
* 字符串。
*/。
unescapehtml:function(a){
a、quot;"+ a
return a.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/"/g,'"').replace(/'/g,"'")。
}
1,escapehtml將<>&「 『轉成字符實體。
使用場景。
(1)用戶在頁面中錄入(比如輸入框),js將該內容提交給後端保存。
(2)顯示時,後端將字符串返回前端;js接收到之後。
a、使用escapehtml,將字符串轉為 <script>alert(2);</script>此時,瀏覽器將能正確解析,因為瀏覽器接收到實體字符後,轉成對應的尖括號等。
b、不使用escapehtml,瀏覽器一看到<,便認為是html標籤的開始,直接把剛才的字符串當腳本執行了,這就是xss漏洞。
2,unescapehtml將字符實體轉成<>&「 『。
使用場景:
後端將已經轉義後的內容顯示到頁面;比如<script>alert(2);</script>
js收到後。
a、前端進行unescapehtml,則可以直接dom操作,將標籤顯示到頁面。
b、前端沒有unescapehtml,則原樣輸出,但此時並沒有執行。
轉義字符:
提示:使用實體名而不是數字的好處是,名稱易於記憶.不過壞處是,瀏覽器也許並不支持所有實體名稱(對實體數字的支持卻很好)。
js代碼。
/**。
* @function escapehtml 轉義html腳本 <>&"'。
* @param a -。
* 字符串。
*/。
escapehtml:function(a){
a、quot;"+ a
return a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")。
}
/**。
* @function unescapehtml 還原html腳本 <>&"'。
* @param a -。
* 字符串。
*/。
unescapehtml:function(a){
a、quot;"+ a
return a.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/"/g,'"').replace(/'/g,"'")。
}
1,escapehtml將<>&「 『轉成字符實體。
使用場景。
(1)用戶在頁面中錄入(比如輸入框),js將該內容提交給後端保存。
(2)顯示時,後端將字符串返回前端;js接收到之後。
a、使用escapehtml,將字符串轉為 <script>alert(2);</script>此時,瀏覽器將能正確解析,因為瀏覽器接收到實體字符後,轉成對應的尖括號等。
b、不使用escapehtml,瀏覽器一看到<,便認為是html標籤的開始,直接把剛才的字符串當腳本執行了,這就是xss漏洞。
2,unescapehtml將字符實體轉成<>&「 『。
使用場景:
後端將已經轉義後的內容顯示到頁面;比如<script>alert(2);</script>
js收到後。
a、前端進行unescapehtml,則可以直接dom操作,將標籤顯示到頁面。
b、前端沒有unescapehtml,則原樣輸出,但此時並沒有執行。
轉義字符:
提示:使用實體名而不是數字的好處是,名稱易於記憶.不過壞處是,瀏覽器也許並不支持所有實體名稱(對實體數字的支持卻很好)。