上一篇講了xss是什麼的問題,這篇主要記錄一些應對xss的處理問題。javascript
看了一些文章以後,總結就是預防xss的關鍵點就是在數據的輸出點上,而不是用戶的輸入點。在數據輸出點上作轉義,也叫編碼。參考了一些資料後,瞭解了瀏覽器的解碼過程,在輸出點上按解碼過程,逆向編碼應該就能夠了,既然找到了這個須要編碼的地方,那應該怎樣處理呢。
那這裏就涉及到編碼和解碼了,應該先熟悉一下。前端
這個應該是有不少的,這裏主要講html,js和url的編碼與解碼。java
html編碼解碼web
var HtmlUtil = { /*1.用瀏覽器內部轉換器實現html轉碼*/ htmlEncode:function (html){ //1.首先動態建立一個容器標籤元素,如DIV var temp = document.createElement ("div"); //2.而後將要轉換的字符串設置爲這個元素的innerText(ie支持)或者textContent(火狐,google支持) (temp.textContent != undefined ) ? (temp.textContent = html) : (temp.innerText = html); //3.最後返回這個元素的innerHTML,即獲得通過HTML編碼轉換的字符串了 var output = temp.innerHTML; temp = null; return output; }, /*2.用瀏覽器內部轉換器實現html解碼*/ htmlDecode:function (text){ //1.首先動態建立一個容器標籤元素,如DIV var temp = document.createElement("div"); //2.而後將要轉換的字符串設置爲這個元素的innerHTML(ie,火狐,google都支持) temp.innerHTML = text; //3.最後返回這個元素的innerText(ie支持)或者textContent(火狐,google支持),即獲得通過HTML解碼的字符串了。 var output = temp.innerText || temp.textContent; temp = null; return output; } };
url編碼解碼 參考文章segmentfault
幾個js的函數能夠解決:
編碼: encodeURI(),encodeURIComponent()
解碼: decodeURI(),decodeURIComponent()後端
js編碼解碼瀏覽器
JS 中的轉義都是經過反斜槓完成,有三種類型,以 ' 和 " 爲例服務器
直接反斜槓 --> \'\"
十六進制 --> \x22\x27
Unicode --> \u0022\u0027cookie
其實我對js的編碼還不是很理解,具體的編碼函數是怎樣的,哪位小夥伴能夠指導一下。
http-only參數。在cookie參數中加入httpOnly屬性,這樣的話javascript就不能取到cookie值,能夠解決一部分xss威脅。
對於後端模板生成的html,在數據生成到html的時候應該要轉義。