說說什麼是 XSS

XSS 指的是:黑客通過 “HTML 注入 ” 篡改網頁,插入惡意指令碼,從而在使用者瀏覽網頁時,控制使用者瀏覽器的一種攻擊 。
舉個例子,我們把 URL 中的引數,直接寫入頁面:
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=123
效果:

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

原始碼:

引數中的指令碼,被寫入頁面,並執行。這就是 XSS 攻擊。
1 反射型 XSS
反射型 XSS 只是將使用者輸入的資料傳送給瀏覽器。即黑客需要誘使使用者點選一個惡意連結或按鈕,才能攻擊成功。這種反射型 XSS 也叫做非持久型 XSS(No-persistent XSS) 。
上述的示例,就是典型的反射型 XSS。
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 事件 。