1. 程式人生 > >《白帽子講Web安全》3-跨站指令碼攻擊(XSS)

《白帽子講Web安全》3-跨站指令碼攻擊(XSS)

第3章 跨站指令碼攻擊(XSS)

3.1 XSS簡介

  1. Cross Site Script,跨站指令碼攻擊,簡稱XSS。
  2. XSS攻擊,通常是指黑客通過“HTML注入”篡改了網頁,插入了惡意的指令碼,從而在客使用者瀏覽網頁時,控制使用者瀏覽器的一種攻擊。
  3. XSS分類
    • 反射型XSS
    • 儲存型XSS
    • DOM Based XSS

3.2 XSS攻擊進階

  1. XSS Payload
    • JavaScript指令碼
    • 最簡單的:竊取Cookie的XSS Payload
      • Cookie的“HttpOnly”標識可以防止“Cookie劫持”
  2. 強大的XSS Payload
    • 構造GET與POST請求
      • 刪除部落格:JacvaScript程式碼
      • 提交表單:JavaScript發出POST請求
        • HTML程式碼構造表單
        • XMLHttpRequest傳送POST請求
    • 瀏覽器的擴充套件和外掛
    • CSS History Hack
    • 獲取使用者的真實IP地址
      • Javascript本身沒有此能力。藉助第三方軟體來完成
      • 如呼叫Java Applet的介面獲取客戶端的本地IP地址。
  3. XSS攻擊平臺
    • Attack API
    • BeEF
    • XSS-Proxy
  4. 終極武器:XSS Worm
    • Samy Worm
      • 一般來說,使用者之間發生互動行為的頁面,如果存在儲存型XSS,則比較容易發起XSS Worm攻擊。
    • 百度空間蠕蟲
  5. 除錯JavaScript
    • 除錯JavaScript,需要有很好的JavaScript工地,除錯JavaScript是必不可少的技能。
    • Firebug
    • IE 8 Developer Tools
    • Fiddler
    • HttpWatch
  6. XSS構造技巧
    • 利用字元編碼
    • 繞過長度限制
      • 利用事件(Event)縮短所需要的位元組數
      • 最好的辦法是把XSS Payload寫到別處,再通過簡短的程式碼載入這段XSS Payload
        • loacation.hash
      • 利用註釋符繞過長度限制
    • 使用<base>標籤
    • window.name的妙用
  7. 變廢為寶:Mission Impossible
    • Apache Expect Header XSS
    • Anehta的迴旋鏢
  8. 容易被忽視的角落:Flash XSS
    • 在Flash中是可以嵌入ActionScript指令碼的
  9. 真的高枕無憂嗎:JavaScript框架

3.3XSS的防禦

  1. HttpOnly
  2. 輸入檢查
  3. 輸出檢查
    • 安全的編碼函式
    • 只需一種編碼嗎
  4. 正確地防禦XSS
    • XSS的本質還是一種“HTML”注入,使用者的資料被當成了HTML程式碼一部分來執行,從而混淆了原來的語義,產生了新的語義。
    • 想要根治XSS問題,可以列出所有XSS可能發生的場景,再一一解決。
    • 下面用變數“$var”表示使用者資料,它將被填充入HTML程式碼中。可能存在以下場景:
    • 在HTML標籤中輸出
    • 在HTML屬性中輸出
    • <script>標籤中輸出
    • 在CSS中輸出
    • 在地址中輸出
  5. 處理富文字
    • HTML
    • CSS
  6. 防禦DOM Based XSS
  7. 換個角度看XSS的風險
    • 前面談到的所有XSS攻擊,都是從漏洞形成的原理上看的。下面從業務風險的角度來看。
    • 一般來說,儲存型XSS的風險會高於反射型XSS
      • 從攻擊過程來說
        • 反射型XSS,一般要求攻擊者誘使使用者點選一個包含XSS程式碼的URL連結。
        • 儲存型XSS,則只需要讓使用者檢視一個正常的URL連結。
      • 從風險的角度來看
        • 使用者之間有互動的頁面,是可能發起XSS Worm攻擊的地方。
        • 根據不同頁面的PageView高低,也可以分析出哪些頁面受XSS攻擊後的影響會更大。

3.4 小結

理論上,XSS漏洞雖然複雜,但卻是可以徹底解決的。

在設計XSS防禦方案時,深入理解XSS攻擊的原理,針對不同的場景使用不同的方法。