XSS攻擊
#1 什麼是XSS攻擊
XSS(Cross Site Scripting)攻擊全稱跨站腳本攻擊,爲了不與層疊樣式表CSS(Cascading Style Sheets)混淆,故將跨站腳本攻擊縮寫爲XSS。
XSS攻擊是指黑客通過HTML注入
篡改網頁,插入惡意腳本,從而在用戶瀏覽網頁時,控制瀏覽器的一種攻擊行爲
XSS攻擊分爲以下幾種:
- 反射型XSS
- 存儲型XSS
- DOM Based XSS
#2 反射型XSS
反射性XSS原理 : 反射性XSS一般指攻擊者通過特定的方式來誘惑受害者去訪問一個包含惡意代碼的URL。這個URL前半部分是正常的訪問某個站點(如:微博)的服務端地址,而URL的參數中加有惡意代碼,當用戶點擊這個URL後,就會正常的訪問微博服務器,如果服務器的這個接口正好會將URL的參數返回給用戶,此時惡意代碼就會在用戶的瀏覽器上運行,如果惡意代碼的內容是獲取站點的Cookie,併發送到攻擊者的服務器,那麼攻擊者就能獲取用戶的Cookie。
反射型XSS大概步驟 :
- 攻擊者在正常的URL(微博某個接口)後面的參數中加入惡意攻擊代碼(代碼內容爲獲取用戶瀏覽器上微博的Cookie)
- 當用戶打開帶有惡意代碼的URL的時候,微博服務端將惡意代碼從URL中取出,拼接在html中並且返回給瀏覽器端。
- 用戶瀏覽器接收到響應後執行解析,其中的惡意代碼也會被執行到。
- 攻擊者通過惡意代碼來竊取到用戶數據併發送到攻擊者的網站。攻擊者會獲取到比如cookie等信息,然後使用該信息來冒充合法用戶的行爲,調用目標網站接口執行攻擊等操作。
#3 存儲型XSS
存儲型XSS原理 : 攻擊者在某個站點的數據庫注入惡意代碼(如:在微博的評論區注入惡意代碼),當有用戶訪問評論時,微博服務端就會將惡意代碼返回給用戶,此時惡意代碼就會在用戶的瀏覽器上執行,並盜取用戶信息
存儲型XSS大概步驟 :
- 攻擊者將惡意代碼提交到目標網站數據庫中(可以通過評論區/留言板注入)。
- 用戶打開目標網站時,網站服務器將惡意代碼從數據庫中取出,然後拼接到html中返回給瀏覽器中。
- 用戶瀏覽器接收到響應後解析執行,那麼其中的惡意代碼也會被執行。
- 那麼惡意代碼執行後,就能獲取到用戶數據,比如上面的cookie等信息,那麼把該cookie發送到攻擊者網站中,那麼攻擊者拿到該
cookie然後會冒充該用戶的行爲,調用目標網站接口等違法操作。
如何防範 :
- 後端需要對提交的數據進行過濾。
- 前端也可以做一下處理方式,比如對script標籤,將特殊字符替換成HTML編碼這些等。
#4 DOM Based XSS
DOM Based XSS原理 : 客戶端的js可以對頁面dom節點進行動態的操作,比如插入、修改頁面的內容。比如說客戶端從URL中提取數據並且在本地執行、如果用戶在客戶端輸入的數據包含了惡意的js腳本的話,但是這些腳本又沒有做任何過濾處理的話,那麼我們的應用程序就有可能受到DOM-based XSS的攻擊。
DOM Based XSS大概步驟 :
- 某個站點的客戶端正好有一個功能,獲取URL中的參數,並對DOM節點進行動態操作
- 用戶瀏覽器收到響應後解析執行。前端使用js取出url中的惡意代碼並執行。
- 執行時,惡意代碼竊取用戶數據併發送到攻擊者的網站中,那麼攻擊者網站拿到這些數據去冒充用戶的行爲操作。調用目標網站接口
執行攻擊者一些操作。
獲取URl的參數,客戶端將參數插入標籤,如果參數是惡意代碼,就會出現如下情況 :
<script>
...
document.body.innerHTML = "<a href='"+url+"'>"+url+"</a>";
...
</script>
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-69WgyJkX-1584915853871)(https://raw.githubusercontent.com/Coxhuang/yosoro/master/20200323061021.png)]
#5 防禦 XSS 的幾種策略
- 瀏覽器端主動進行XSS識別,Chrome瀏覽器會自動識別XSS攻擊代碼
- 服務器端對於用戶輸入的內容進行過濾
服務端如何處理 :
- 將重要的cookie標記爲http only, 這樣的話Javascript 中的document.cookie語句就不能獲取到cookie了
- 對數據進行html encode處理,過濾或移除特殊的Html標籤
- 過濾JavaScript 事件的標籤。例如 “οnclick=”, “onfocus” 等等
#5 XSS與CSRF區別
- CSRF攻擊是在用戶登錄過某站點,並且在Cookie還沒過期前,誘導用戶點擊惡意鏈接,這樣就可以以用戶的身份訪問該站點服務端的一些接口(如:銀行轉賬)
- XSS攻擊是通過惡意鏈接或者往服務器注入惡意代碼,達到獲取用戶cookie等信息