XSS 指的是:黑客經過 「HTML 注入 」 篡改網頁,插入惡意腳本,從而在用戶瀏覽網頁時,控制用戶瀏覽器的一種攻擊 。javascript
舉個例子,咱們把 URL 中的參數,直接寫入頁面:html
window.onload=function () {
var args = getQueryStringArgs();
var param = args["param"];
document.write(param)
}
複製代碼
正常 URL 請求:http://localhost:63342/xss.html?param=123
java
效果: 瀏覽器
帶 XSS 攻擊的 URL 請求:http://localhost:63342/xss.html?param=<script>alert(/xssAttack/)</script>
bash
XSS 攻擊效果:服務器
源代碼: xss
參數中的腳本,被寫入頁面,並執行。這就是 XSS 攻擊。函數
反射型 XSS 只是將用戶輸入的數據發送給瀏覽器。即黑客須要誘使用戶點擊一個惡意連接或按鈕,才能攻擊成功。這種反射型 XSS 也叫作非持久型 XSS(No-persistent XSS) 。ui
上述的示例,就是典型的反射型 XSS。spa
存儲型 XSS 會把用戶輸入的數據保存在服務器端,因此具備很高的穩定性。存儲型 XSS 也叫作 持久型 XSS(Persistent XSS)。
DOM Based XSS 指的是:經過修改頁面 DOM 節點造成的 XSS。從效果上來講,DOM Based XSS 也是一種反射型的 XSS。由於造成緣由特別,因此單獨分類。
<body>
<script type="text/javascript">
function save() {
var input_content = document.getElementById("user_input").value;
document.getElementById("content").innerHTML = "<a href='" + input_content + "'>點擊</a>";
}
</script>
<input type="text" id="user_input" value="">
<input type="button" onclick="save()" value="肯定">
<div id="content"></div>
</body>
複製代碼
點擊「肯定」按鈕以後,會在頁面寫入一個 <a>
標籤,標籤的 URL 是用戶輸入的內容。
咱們在輸入框中鍵入攻擊表達式:
'onclick=alert(/xssAttack/)//
XSS 攻擊效果:
攻擊表達式中的第一個單引號,閉合掉 href 的第一個單引號,而後插入 onclick 事件,最後再用註釋符 //
註釋掉代碼中的第二個單引號。
修改攻擊表達式,還能夠直接開始攻擊:
'><img src=# onerror=alert(/xssAttack2/) /><'
XSS 攻擊效果:
這裏首先閉合掉 <a>
標籤,而後插入一個 <img>
標籤。這裏利用了 <img>
標籤的 onerror 事件。由於若是在圖像加載的過程當中發生了錯誤,就會觸發 onerror 事件 。