跨站腳本攻擊 XSS

【內容總結自:極客時間:瀏覽器工作原理與實現--李兵】僅作爲自己學習記錄總結

 

什麼是 XSS?

XSS 全稱是 Cross Site Scripting,爲了與“CSS”區分開來,故簡稱 XSS,翻譯過來就是“跨站腳本”。

 

XSS 攻擊可以做什麼?

  • 竊取 Cookie 信息。通過“document.cookie”獲取 Cookie 信息
  • 監聽用戶行爲。使用“addEventListener”接口來監聽鍵盤事件,獲取用戶輸入的信息
  • 修改 DOM 僞造假的登錄窗口,獲取用戶的登錄信息等(還可生成廣告,影響用戶體驗)
  • ......等

 

如何發起XSS攻擊?

通常情況下,主要有存儲型 XSS 攻擊反射型 XSS 攻擊基於 DOM 的 XSS 攻擊三種方式來注入惡意腳本

存儲型xss攻擊:

攻擊者:將一段惡意JavaScript代碼提交到服務器數據庫中保存

瀏覽器:渲染了一個公共頁面,顯示了【攻擊者】提交的數據

用戶:用戶瀏覽的頁面,包含了【攻擊者】的惡意JavaScript代碼

結果:【攻擊者】的腳本代碼就可能獲取到【用戶】的相關信息等

情景描述:比如一個倉庫,沒有大門也沒有門衛(網站沒做任何安全措施)。一個壞蛋(黑客)光明正大的走了進去,並找了一個空地,埋下了一顆地雷(惡意腳本)。然後有一個普通人走進了倉庫(瀏覽頁面),在普通人沒有靠近地雷區域的時候,他都是出於安全的狀態。普通人在倉庫裏逛啊逛,突然走到了地雷區域(有惡意腳本的頁面),然後不小心踩到了,就炸了(xss攻擊)。

反射型 XSS 攻擊:

在一個反射型 XSS 攻擊過程中,惡意 JavaScript 腳本屬於用戶發送給網站請求中的一部分,隨後網站又把惡意 JavaScript 腳本返回給用戶。

比如一個網址:https://www.xxx.com?name=zhangsan

通過帶參數的形式,把 zhangsan 渲染到頁面上

這個時候,就可以修改鏈接:https://www.xxx.com?name=<script>alert('你被xss攻擊了')</script>

存儲型和反射型的區別:一個保存在服務器的數據庫中個 ,一個只是僞裝在鏈接的參數上。

基於 DOM 的 XSS 攻擊

基於 DOM 的 XSS 攻擊是不牽涉到頁面 Web 服務器的。具體來講,黑客通過各種手段將惡意腳本注入用戶的頁面中,比如通過網絡劫持在頁面傳輸過程中修改 HTML 頁面的內容,這種劫持類型很多,有通過 WiFi 路由器劫持的,有通過本地惡意軟件來劫持的,它們的共同點是在 Web 資源傳輸過程或者在用戶使用頁面的過程中修改 Web 頁面的數據。

如何阻止 XSS 攻擊?

存儲型xss攻擊 和 反射型xss攻擊 屬於 服務端 的問題 而 基於DOM的xss攻擊 則是 前端 的責任

不管是哪種類型的攻擊,都是往瀏覽器中注入惡意腳本,然後再通過惡意腳本將獲取到的信息發送到黑客部署的服務器中

1. 服務器對輸入腳本進行過濾或轉碼

不管是反射型還是存儲型 XSS 攻擊,都可以在服務器端將一些關鍵的字符進行轉碼

比如最典型的

// 過濾前
code:<script>alert('xss攻擊');</script>

// 過濾後
code:

除了直接過濾掉 <script>xxx</script> 之外,還可以對關鍵字符進行轉碼

// 還是上面的代碼
code:<script>alert('xss攻擊');</script>
// 轉碼後
code:&lt;script&gt;alert(&#39;你被xss攻擊了&#39;)&lt;/script&gt;

2. 充分利用 CSP

爲了解決 XSS 攻擊,瀏覽器中引入了內容安全策略,稱爲 CSP。

CSP 的核心思想是讓服務器決定瀏覽器能夠加載哪些資源,讓服務器決定瀏覽器是否能夠執行內聯 JavaScript 代碼。通過這些手段就可以大大減少 XSS 攻擊。

在服務端對數據進行過濾和轉碼可以阻止xss的攻擊,但是這還是不夠的。還需要充分利用 CSP 等策略。

具體來講 CSP 有如下幾個功能:

  • 限制加載其他域下的資源文件,這樣即使黑客插入了一個 JavaScript 文件,這個 JavaScript 文件也是無法被加載的;
  • 禁止向第三方域提交數據,這樣用戶數據也不會外泄;
  • 禁止執行內聯腳本和未授權的腳本;
  • 還提供了上報機制,這樣可以幫助我們儘快發現有哪些 XSS 攻擊,以便儘快修復問題。

3. 使用 HttpOnly 屬性

xss攻擊主要都是來盜用 cookie 信息的。因此可以使用 HttpOnly 來保護 cookie 的安全

 在服務器端給 header 設置 HttpOnly 屬性

總結: 

  • XSS 攻擊就是黑客往頁面中注入惡意腳本,然後將頁面的一些重要數據上傳到惡意服務器。
  • 常見的三種 XSS 攻擊模式是存儲型 XSS 攻擊、反射型 XSS 攻擊和基於 DOM 的 XSS 攻擊。
  • 這三種攻擊方式的共同點是都需要往用戶的頁面中注入惡意腳本,然後再通過惡意腳本將用戶數據上傳到黑客的惡意服務器上。
  • 而三者的不同點在於注入的方式不一樣,有通過服務器漏洞來進行注入的,還有在客戶端直接注入的。
  • 針對這些 XSS 攻擊,主要有三種防範策略,第一種是通過服務器對輸入的內容進行過濾或者轉碼,第二種是充分利用好 CSP,第三種是使用 HttpOnly 來保護重要的 Cookie 信息。
  • 當然除了以上策略之外,我們還可以通過添加驗證碼防止腳本冒充用戶提交危險操作。
  • 而對於一些不受信任的輸入,還可以限制其輸入長度,這樣可以增大 XSS 攻擊的難度。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章