標籤:提示 java 提交 使用情境 div com bsp dex javascrip
在開發中遇到javascript從後台擷取的url 會被轉義,如:http://localhost:8080/Home/Index?a=14&b=15&c=123,想把它轉成http://localhost:8080/Home/Index?a=14&b=15&c=123
網上找了半天的解決方案:
轉義分為escapeHTML和unescapeHTML,先看兩個函數的實現。
js代碼:
/** * @function escapeHTML 轉義html指令碼 < > & " ‘ * @param a - * 字串 */escapeHTML: function(a){ a = "" + a; return a.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/‘/g, "'");;},/** * @function unescapeHTML 還原html指令碼 < > & " ‘ * @param a - * 字串 */unescapeHTML: function(a){ a = "" + a; return a.replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&").replace(/"/g, ‘"‘).replace(/'/g, "‘");},
1,escapeHTML將< > & " ‘轉成字元實體
使用情境:
(1)使用者在頁面中錄入(比如輸入框) <script>alert(2);</script>, 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,則原樣輸出<script>alert(2);</script>,但此時並沒有執行。
逸出字元:
提示:使用實體名而不是數位好處是,名稱易於記憶。不過壞處是,瀏覽器也許並不支援所有實體名稱(對實體數位支援卻很好)。
【逸出字元】HTML 字元實體< >: &