Web 漏洞分析與防護之 XSS(一)

原文地址:Web 漏洞分析與防護之 XSS(一)
博客地址:www.extlight.comhtml

1、全稱

跨站腳本攻擊(Cross Site Scripting)前端

2、原理

經過在網站中的輸入框寫入 script 腳本或引入 script 文件,若是網站未過濾輸入內容,將會解析該腳本。git

若是腳本的功能是獲取網站的 cookie,cookie 中又保留一些敏感信息,則後果有可能很嚴重。github

3、類型

  • 反射型攻擊:腳本看成 url 的參數進行注入執行瀏覽器

  • 存儲型攻擊:腳本被存儲到 DB 後,讀取時被解析執行bash

4、注入點

4.1 HTML 節點

頁面代碼:cookie

<div>${content}</div>複製代碼

content 的內容爲 <script>alert(1)</script>,腳本攻擊後,會變成:xss

<div><script>alert(1)</script></div>複製代碼

頁面將會執行 alert(1)。工具

4.2 HTML 屬性

頁面代碼:網站

<img src="${imgSrc}" />複製代碼

imgSrc 的內容爲 2" onerror="alert(2),腳本攻擊後,會變成:

<img src="2" onerror="alert(2)" />複製代碼

頁面將會執行 alert(2)。

4.3 Javascript 代碼

<script>
    var mydata = "${data}";
</script>複製代碼

data 的內容爲 hello";alert(3);",腳本攻擊後,會變成:

<script>
    var mydata = "hello";alert(3);"";
</script>複製代碼

頁面將會執行 alert(3)。

4.4 富文本

富文本須要保留 HTML 文本,HTML 文本中就有 XSS 攻擊的風險。

5、防護

瀏覽器自帶一些防護能力,但只能防護 XSS 反射類型攻擊,且只能防護上文描述的前二個注入點。

防護手段原理也很簡單,就是將可能會執行腳本的標籤或屬性進行轉義和過濾。

5.1 HTML 節點的防護

將 < 和 > 轉義成 &lt; 和 &gt;。

5.2 HTML 屬性的防護

將 " 轉義成 &quto;。

5.3 Javascript 代碼的防護

將 " 轉義成 \「 。

5.3 富文本的防護

使用白名單保留部分標籤和屬性。

須要前端第三方工具:cheerio

案例:

function xssFilter(html) {

    var cheerio = require("cheerio");
    var $ = cheerio.load(html);

    // 白名單列表,key:標籤,value:屬性
    var whiteList = {
        "img":["src"],
        "a":["href"],
        "font":["color","size"]
    };


    // html 的遍歷全部元素
    $("*").each(function(index,elem) {

        // 刪除不在白名單的標籤
        if (!whiteList[elem.name]) {
            $(elem).remove();
            return;
        }

        // 刪除不在白名單的標籤的屬性
        for (var attr in elem.attribs) {
            if (whiteList[elem.name].indexOf(attr) == -1) {
                $(elem).attr(attr,null);
                return;
            }
        }

    });

    return $.html();

}複製代碼

還有另外一種第三方工具,名字就叫 xss

相關文章
相關標籤/搜索