跨站腳本攻擊(Cross Site Scripting),是一種 Web 應用程序的漏洞,當來自用戶的不可信數據被應用程序在沒有驗證以及反射回瀏覽器而沒有進行編碼或轉義的狀況下進行了處理,致使瀏覽器引擎執行了代碼。javascript
又叫非持久型XSS,當不可信的用戶輸入被服務器在沒有任何驗證下處理並在沒有編碼或轉義的狀況下反射回響應文中,致使代碼在瀏覽器執行的一種 XSS 漏洞。php
xss攻擊參數:";alert('xss');// 產生緣由:服務端未對參數就行編碼或者轉義致使 採用任何一種php提供的方法進行編碼均可以過濾XSS $name = htmlspecialchars($_GET['name']);
又叫持久型XSS是當不可信的用戶輸入被處理並在沒有任何驗證的狀況下保存在文件或數據庫,同時該不可信的數據從存儲中被獲取而後在沒有編碼或轉義的狀況下反射回響應文中,致使了永久性的每次存儲數據反射回響應文代碼就會在瀏覽器中執行的一種XSS漏洞。html
數據來源在 DOM 中,接收器也在 DOM 中,而數據流歷來沒有離開瀏覽器。它發生在一個不可信的數據在源中被給予並被執行,結果致使修改了 DOM 在瀏覽器中的「環境」。DOM XSS 攻擊發生在不可信數據相對於上下文沒有被編碼或轉義的狀況下。前端
效果地址java
普通圖片地址:http://p1.qhimg.com/t010c1d27667bbe0417.png數據庫
XSS地址:http://p1.qhimg.com/t010c1d27667bbe0417.png" onload="javascript:alert(document.cookie);
mXSS 或突變 XSS 是當不可信數據在 DOM 的 innerHTML 屬性的上下文被處理並經過瀏覽器發生突變,致使變成一種有效的 XSS 向量的一種 XSS 漏洞。在 mXSS,一個看起來無害的能夠經過客戶端或服務端XSS過濾器的用戶指定的數據經過瀏覽器執行引擎發生突變能夠反射回一個有效的 XSS 向量。XSS 過濾器不能防止 mXSS。爲了防止 mXSS,應實施有效的 CSP,框架應該不被容許,HTML 文檔應該定義文檔類型,強制瀏覽器遵循標準呈現內容以及執行腳本。瀏覽器
正常輸入沒有問題,在瀏覽器再次解析的時候出現了問題。服務器
看看這裏吧cookie
驗證輸入而且基於語境和按照正確的順序轉義不可信數據
瀏覽器的解析順序:html->css->js
瀏覽器的解碼順序:html->url->js
始終遵循白名單優於黑名單的作法
由於黑名單的集合是無限的,咱們不能考慮到各類狀況
使用 UTF-8 爲默認的字符編碼以及設置 content 爲 text/html
使用推薦的 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 | 始終設置響應的內容類型和字符集 |
給開發者的終極XSS防禦備忘錄
前端XSS防火牆1
前端XSS防火牆2
前端XSS防火牆3
前端XSS防火牆4
前端XSS防火牆5