學習xss的一些記錄(二)

上一篇講了xss是什麼的問題,這篇主要記錄一些應對xss的處理問題。javascript

xss前端處理

參考文章一
參考文章二
參考文章三html

看了一些文章以後,總結就是預防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的編碼還不是很理解,具體的編碼函數是怎樣的,哪位小夥伴能夠指導一下。

xss服務器端處理

  1. http-only參數。在cookie參數中加入httpOnly屬性,這樣的話javascript就不能取到cookie值,能夠解決一部分xss威脅。

  2. 對於後端模板生成的html,在數據生成到html的時候應該要轉義。

相關文章
相關標籤/搜索