【web安全】淺談web安全之XSS

XSS定義

  XSS, 即爲(Cross Site Scripting), 中文名爲跨站腳本, 是發生在目標用戶的瀏覽器層面上的,當渲染DOM樹的過程成發生了不在預期內執行的JS代碼時,就發生了XSS攻擊。html

跨站腳本的重點不在‘跨站’上,而在於‘腳本’上。大多數XSS攻擊的主要方式是嵌入一段遠程或者第三方域上的JS代碼。其實是在目標網站的做用域下執行了這段js代碼。前端

攻擊手段:

  1.盜用cookie  獲取敏感信息git

  2.破壞頁面結構  插入惡意內容(反射性)github

  3.利用flash(瞭解)web

  4.DDOS(強大 難以防護)數據庫

    DDOS:分佈式拒絕服務攻擊(Distributed Denial of Service),簡單說就是發送大量請求是使服務器癱瘓。DDos攻擊是在DOS攻擊基礎上的,能夠通俗理解,dos是單挑,而ddos是羣毆,由於現代技術的發展,dos攻擊的殺傷力下降,因此出現了DDOS,攻擊者藉助公共網絡,將大數量的計算機設備聯合起來,向一個或多個目標進行攻擊。express

在技術角度上,DDoS攻擊能夠針對網絡通信協議的各層,手段大體有:TCP類的SYN Flood、ACK Flood,UDP類的Fraggle、Trinoo,DNS Query Flood,ICMP Flood,Slowloris類等等。通常會根據攻擊目標的狀況,針對性的把技術手法混合,以達到最低的成本最難防護的目的,而且能夠進行合理的節奏控制,以及隱藏保護攻擊資源。npm

下面介紹一下TCP協議中的SYN攻擊。瀏覽器

 常見的web攻擊總結:http://www.javashuo.com/article/p-sdrhzktr-gu.html安全

攻擊方式:

  反射型

    發出請求時,XSS代碼出如今URL中,做爲輸入提交到服務器端,服務器解析後響應,XSS代碼隨響應內容一塊兒傳回給瀏覽器,最後瀏覽器解析執行XSS代碼。這個過程想一次反射,故叫反射型XSS

  存儲型(持久型XSS漏洞)

    存儲型XSS和反射型XSS的差異僅在於,提交的代碼會存儲在服務器端(數據庫、內存、文件系統等),下次請求目標頁面時不用再提交XSS代碼

  DOM XSS
    DOM XSS攻擊不一樣於反射型XSS和存儲型XSS,DOM XSS代碼不須要服務器端的解析響應的直接參與,而是經過瀏覽器端的DOM解析。這徹底是客戶端的事情。

  DOM XSS代碼的攻擊發生的可能在於咱們編寫JS代碼形成的。咱們知道eval語句有一個做用是將一段字符串轉換爲真正的JS語句,所以在JS中使用eval是很危險的事情,容易形成XSS攻擊。避免  使用eval語句。

XSS的反射型攻擊演示

構建Node服務進行演示

  • 1.新建文件夾,命令行輸入:

    • express -e ./使用express腳手架,用ejs做爲模板引擎,在當前目錄執行
    • npm install安裝依賴
  • 2.在routes/index.js下設置路由:

    router.get('/', function(req, res, next) {
        res.set('X-XSS-Protection',0); //關掉瀏覽器對XSS的檢測
        res.render('index',{ title:'Express',xss:req.query.xss }); 
    }); //query是express獲取search的字段

     

  • 3.在views/index.ejs中的body部分添加:

    <div class="">
        <%- xss %><!--'-'表示容許輸入html,不須要轉義-->
    </div>

     

  • 4.命令行輸入:

    npm start開啓服務器

  • 5.在http://localhost:3000/後輸入

    ?xss=<iframe src="//baidu.com/h.html"></iframe>
    或者?xss=<img src="null" onerror="alert("1")">
    或者?xss=<p onclick="alert("1")">點我</p>

    進行模仿XSS的放射型攻擊。第一個效果以下圖:

    XSS-WebSecurity

  

 

XSS的防護措施

  對cookie保護

    對重要的cookie設置httpOnly, 防止客戶端經過document.cookie讀取cookie。服務端能夠設置此字段。

  對用戶輸入的內容

    1.編碼:對用戶輸入的數據進行HTML Entity編碼

    2.解碼:

      避免直接對HTML Entity編碼

      使用DOM Parse轉碼,校訂不配對的DOM標籤

    3.過濾:

      移除用戶上傳的DOM屬性,如onerror,onclick等

      移除用戶上傳的Style節點、Script節點、 iframe節點等

    

XSS評論代碼注入防護demo

  1.文本由服務器端轉義,客戶端反轉義,再DomParse,再過濾

  2.使用encode.js和domparse.js第三方庫對文本進行解碼和DOM parse操做

項目連接:https://github.com/ickedesign/XSS_WebSecurity  

擴展:其餘的web安全知識

 

相關資料:

相關文章
相關標籤/搜索