Web安全之XSS攻防
1. XSS的定義
跨站腳本攻擊(Cross Site Scripting),縮寫為XSS。惡意攻擊者往Web頁面裡插入惡意Script代碼,當使用者浏覽該頁之時,嵌入其中Web裡面的Script代碼會被執行,進而達到惡意攻擊使用者的目的。
2. XSS的原理
攻擊者對含有漏洞的伺服器發起XSS攻擊(注入JS代碼)。
誘使受害者打開受到攻擊的伺服器URL。
受害者在Web浏覽器中打開URL,惡意腳本執行。
3. XSS的攻擊方式
(1)反射型: 送出請求時,XSS代碼出現在URL中,作為輸入送出到伺服器端,伺服器端解析後響應,XSS随響應内容一起傳回給浏覽器,最後浏覽器解析執行XSS代碼,這個過程就像一次發射,是以叫反射型XSS。
(2)存儲型: 存儲型XSS和反射型的XSS差别就在于,存儲型的XSS送出的代碼會存儲在伺服器端(資料庫,記憶體,檔案系統等),下次請求目标頁面時不用再送出XSS代碼。
4. XSS的防禦措施
(1)編碼:對使用者輸入的資料進行HTML Entity編碼
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SN3YWZ1IGO2UmMzkTMyMTOwMzY2kDOyQ2Y0MjYiVWY18CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
(2)過濾:移除使用者上傳的DOM屬性,如onerror等,移除使用者上傳的style節點,script節點,iframe節點等。
(3)校正:避免直接對HTML Entity編碼,使用DOM Prase轉換,校正不配對的DOM标簽。
5. 應用示例
建構node應用,示範反射型XSS攻擊。(Linux作業系統中)
本例子的代碼位址:https://github.com/Xganying/Web-XSS (xss_test1)
(1) 建立一個檔案夾xss: mkdir xss_test1
(2) 切換目錄到該檔案夾下: cd xss
(3) 安裝express: express -e ./
(4) 建構應用依賴: npm install
(5) 打開建構好的node應用,得到目錄:
(6) 開啟node服務:npm start
(7) 在浏覽器位址欄輸入:localhost:3000 ,得到:
(8) 加入xss
修改xss_test1檔案routers目録下的index.js檔案:
修改xss_test1檔案views目錄下的index.ejs檔案:
(9) 重新開機node服務:npm start ,打開浏覽器
a. 在位址欄輸入: localhost:3000/?xss=hello
運作結果得到:
b. 在位址欄輸入:localhost:3000/?xss=<img src="null" οnerrοr="alert(1)">
運作結果得到:
說明: 如果代碼中沒有 res.set('X-XSS-Protection', 0); 則會發現沒有彈出框,這是因為浏覽器自動設定了攔截XSS,是以onerror事件并不會執行,而加上了:res.set('X-XSS-Protection', 0); 才會出現彈框,這才完成了一次xss攻擊。
c. 在位址欄輸入:localhost:3000/?xss=<p οnclick="alert(%點我%)">點我</p>
運作結果得到:
說明: 這種攻擊就是常用于篡改頁面内容,破壞頁面結構,引誘使用者去點選一些釣魚等網站的手段。
d. 在位址欄輸入:localhost:3000/?xss=<iframe src="//baidu.com/t.html"></iframe>
運作結果得到:
說明:這種攻擊就常用于廣告植入等。
簡單總結就是: img标簽是自動觸發而受到攻擊的,p标簽是引誘出發而受到攻擊的的,而iframe則是廣告植入攻擊的。
本文介紹了Web安全之XSS攻擊與防禦小結,XSS的定義、原理、攻擊方式、防禦措施及應用示例, 希望對您的學習有所幫助。
小編還整理了2021年網絡安全入門到精通 電子書籍,祝大家在金三銀四的日子裡順利找到自己喜歡的崗位,需要的朋友點選領取!
網絡安全學習路線
詳細網絡安全白皮書版本點選領取
贈送2021工具大禮包