說說什麼是 XSS

XSS 指的是:黑客經過 「HTML 注入 」 篡改網頁,插入惡意腳本,從而在用戶瀏覽網頁時,控制用戶瀏覽器的一種攻擊 。javascript

舉個例子,咱們把 URL 中的參數,直接寫入頁面:html

window.onload=function () {
	var args = getQueryStringArgs();
	var param = args["param"];
	document.write(param)
}
複製代碼
  • getQueryStringArgs() 函數會獲取 URL 請求中的查詢字符串。具體實現請點擊
  • write() 方法會向文檔中寫入 HTML 表達式或 JavaScript 代碼。

正常 URL 請求:http://localhost:63342/xss.html?param=123java

效果: 瀏覽器

帶 XSS 攻擊的 URL 請求:http://localhost:63342/xss.html?param=<script>alert(/xssAttack/)</script>bash

XSS 攻擊效果:服務器

源代碼: xss

參數中的腳本,被寫入頁面,並執行。這就是 XSS 攻擊。函數

1 反射型 XSS

反射型 XSS 只是將用戶輸入的數據發送給瀏覽器。即黑客須要誘使用戶點擊一個惡意連接或按鈕,才能攻擊成功。這種反射型 XSS 也叫作非持久型 XSS(No-persistent XSS) 。ui

上述的示例,就是典型的反射型 XSS。spa

2 存儲型 XSS

存儲型 XSS 會把用戶輸入的數據保存在服務器端,因此具備很高的穩定性。存儲型 XSS 也叫作 持久型 XSS(Persistent XSS)。

3 DOM Based 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 事件 。

相關文章
相關標籤/搜索