XSS初體驗

主要內容


  • 什麼是XSS?
  • XSS的危害有哪些?
  • 常見的XSS漏洞
  • 如何防範XSS?
 

什麼是XSS?


跨站腳本攻擊(Cross Site Scripting),是一種 Web 應用程序的漏洞,當來自用戶的不可信數據被應用程序在沒有驗證以及反射回瀏覽器而沒有進行編碼或轉義的狀況下進行了處理,致使瀏覽器引擎執行了代碼。javascript

 

XSS的危害有哪些?


  • 盜取各種用戶賬號,如機器登陸賬號、用戶網銀賬號、各種管理員賬號
  • 控制企業數據,包括讀取、篡改、添加、刪除企業敏感數據的能力;
  • 盜竊企業重要的具備商業價值的資料;
  • 非法轉帳;
  • 強制發送電子郵件;
  • 網站掛馬;
  • 控制受害者機器向其它網站發起攻擊。
  • ...
 

常見的XSS漏洞


  • 反射型XSS
  • 存儲型XSS
  • DOM XSS
  • 突變XSS
 

反射型XSS


又叫非持久型XSS,當不可信的用戶輸入被服務器在沒有任何驗證下處理並在沒有編碼或轉義的狀況下反射回響應文中,致使代碼在瀏覽器執行的一種 XSS 漏洞。php


例子代碼
正常效果 
XSS效果css

xss攻擊參數:";alert('xss');//

產生緣由:服務端未對參數就行編碼或者轉義致使
採用任何一種php提供的方法進行編碼均可以過濾XSS
$name = htmlspecialchars($_GET['name']);
 

存儲型XSS

又叫持久型XSS是當不可信的用戶輸入被處理並在沒有任何驗證的狀況下保存在文件或數據庫,同時該不可信的數據從存儲中被獲取而後在沒有編碼或轉義的狀況下反射回響應文中,致使了永久性的每次存儲數據反射回響應文代碼就會在瀏覽器中執行的一種XSS漏洞。html

 

DOM XSS


數據來源在 DOM 中,接收器也在 DOM 中,而數據流歷來沒有離開瀏覽器。它發生在一個不可信的數據在源中被給予並被執行,結果致使修改了 DOM 在瀏覽器中的「環境」。DOM XSS 攻擊發生在不可信數據相對於上下文沒有被編碼或轉義的狀況下。前端

dom xss代碼
效果地址java

普通圖片地址:http://p1.qhimg.com/t010c1d27667bbe0417.png數據庫

XSS地址:http://p1.qhimg.com/t010c1d27667bbe0417.png" onload="javascript:alert(document.cookie);
 

突變XSS


mXSS 或突變 XSS 是當不可信數據在 DOM 的 innerHTML 屬性的上下文被處理並經過瀏覽器發生突變,致使變成一種有效的 XSS 向量的一種 XSS 漏洞。在 mXSS,一個看起來無害的能夠經過客戶端或服務端XSS過濾器的用戶指定的數據經過瀏覽器執行引擎發生突變能夠反射回一個有效的 XSS 向量。XSS 過濾器不能防止 mXSS。爲了防止 mXSS,應實施有效的 CSP,框架應該不被容許,HTML 文檔應該定義文檔類型,強制瀏覽器遵循標準呈現內容以及執行腳本。瀏覽器

 

很難理解!!!


 

簡單的說


正常輸入沒有問題,在瀏覽器再次解析的時候出現了問題。服務器

 

仍是挺繞的~~~


看看這裏吧cookie

 

擴展


  • UXSS:是經過瀏覽器或者瀏覽器擴展的漏洞來"製做XSS漏洞"
  • CSRF:跨站請求僞造

參考

 

如何進行防範呢?


  • 驗證輸入而且基於語境和按照正確的順序轉義不可信數據 
    瀏覽器的解析順序:html->css->js 
    瀏覽器的解碼順序:html->url->js

  • 始終遵循白名單優於黑名單的作法 
    由於黑名單的集合是無限的,咱們不能考慮到各類狀況

  • 使用 UTF-8 爲默認的字符編碼以及設置 content 爲 text/html 

  • 不要將用戶能夠控制的文本放在標籤前。經過使用不一樣的字符集註射能夠致使 XSS。
  • 使用推薦的 HTTP 響應頭進行 XSS 防禦


 

HTTP響應頭 描述
X-XSS-Protection: 1; mode=block 該響應頭會開啓瀏覽器的防XSS 過濾器。
X-Frame-Options: deny 該響應頭會禁止頁面被加載到框架。
X-Content-Type-Options: nosniff 該響應頭會阻止瀏覽器作MIMEtype
Content-Security-Policy: default-src 'self' 該響應頭是防止 XSS 最有效的解決方案之一。它容許咱們定義從 URLS 或內容中加載和執行對象的策略
Set-Cookie: key=value; HttpOnly Set-Cookie 響應頭經過HttpOnly 標籤的設置將限制JavaScript 訪問你的 Cookie。
Content-Type: type/subtype;charset=utf-8 始終設置響應的內容類型和字符集
 

終極方案


  • 編碼 
  • 轉義
  • 規範書寫
  • 預防更改http請求頭
  • XSS監控以及上報
 

參考資料


給開發者的終極XSS防禦備忘錄 
前端XSS防火牆1 
前端XSS防火牆2 
前端XSS防火牆3 
前端XSS防火牆4 
前端XSS防火牆5

相關文章
相關標籤/搜索