什麼是跨網站指令碼 (XSS)?
跨站指令碼 (XSS) 攻擊會將惡意指令碼注入可信賴的網站,以針對訪客並影響未來的互動。雖然 XSS 攻擊存在已久 (1999 年首次發現),但仍是一種流行的網路攻擊形式。事實上,在 IBM 的 2024 雲端威脅趨勢報告 中,XSS 是被發現最多的 雲端 弱性。
XSS 攻擊利用 網路應用程式內的安全性錯配 來注入惡意 程式 碼 (最常見的是用戶端 JavaScript 程式碼),而網站擁有者或訪客卻不會察覺。由受害者瀏覽器檢查的具有適當憑證的可信網站,在不知不覺中成為來自不可信來源的惡意指令碼的傳送機制。
這些腳本會在受害者的瀏覽器上執行,危害他們與網路應用程式的互動方式。這可能會透過多種方法發生,包括篡改網站、騎劫他們的會話、注入惡意軟體和網路釣魚。
XSS 攻擊如何運作
簡化的 3 步 XSS 攻擊流程如下:
- 攻擊者會找出易受攻擊的網站作為目標,並注入惡意程式碼。例如,如果網站未驗證所有輸入內容。
- 一旦惡意程式碼出現在網站上,攻擊者會被動地等待毫無戒心的訪客執行惡意程式碼,或是主動將受攻擊的網站連結傳送給潛在受害者。這可以透過社交媒體訊息或電子郵件來進行,誘使他們造訪頁面。
- 最後,一旦網站訪客執行程式碼並成為受害者,攻擊者就可以依據他們的目標,以多種不同的方式操控未來的互動。
XSS 攻擊會繞過瀏覽器的來源政策,將惡意指令碼隱藏在受信任的網站內。瀏覽器會檢查網站是否安全,是否有適當的憑證。但是,他們無法驗證任何可能已注入網站的其他腳本。因此,不佳的網路路應用程式安全性會讓使用者暴露於惡意指令碼中,造成嚴重後果。
XSS 攻擊的影響
根據攻擊的類型和駭客的目標,XSS 可能會對網路應用程式及其使用者造成一系列後果。 對於造訪網站或使用網路應用程式的人而言,XSS 攻擊可能會導致:
- 網站塗污: 透過修改 HTML 或 CSS 來操控網站的圖像或加入新元素,以改變訪客所看到的內容。攻擊者可以向他們展示與原始網站完全不同的東西,讓他們做一些他們通常不會做的事情。
- 會話劫持: 透過在受害者瀏覽器上執行惡意程式碼,攻擊者可以存取 cookies 來騎劫會話。這允許他們控制他們在網路路應用程式上的帳戶、執行未授權的行動,以及存取儲存在瀏覽器上的敏感資訊。
- 惡意軟體注入: 攻擊者的惡意指令碼會注入惡意軟體到訪客的瀏覽器,然後可逃逸到他們的系統上原生執行。 此惡意軟體可能有許多不同的目標,包括擷取登入憑證的鍵盤紀錄器、加密貨幣挖礦軟體,或控制系統作為更廣泛殭屍網絡的一部分,以用於不同的 DDoS 攻擊。
- 網路釣魚: 利用虛假的輸入欄位將訪客重新導向至網路釣魚網站,以擷取使用者的認證並控制他們的帳戶。
雖然訪客通常是 XSS 攻擊的主要目標,但他們也會影響網路應用程式。資料外洩會造成合規性問題,帶來潛在的罰金、法律後果和聲譽損害。網站污損可能會導致攻擊者顯示攻擊性或惡意內容,也會造成聲譽損害。
此外,如果 XSS 攻擊危及擁有特權存取權限的受害者,可能會導致駭客控制網路路應用程式功能,並造成更嚴重的資料外洩。
XSS 攻擊類型
反射式跨站指令碼
反射式 XSS 是指網路應用程式「反射」惡意程式碼給使用者,最常見的方式是透過有漏洞的輸入欄位。 舉例來說,如果網站沒有對網址參數所提供的輸入進行 sanitize,攻擊者就可以透過嵌入連結來注入惡意指令碼。 點擊此連結的使用者會在不知情的情況下執行腳本,將他們的瀏覽器暴露給攻擊者。反射式 XSS 只會在點選連結時發生。這是一種非持久性的跨網站指令碼。
儲存跨網站指令碼
儲存 XSS 是一種持續性的跨網站指令碼形式,會持續感染新使用者,直到網站擁有者偵測到威脅並回應為止。在這些攻擊中,不受信任的來源會使用永久儲存的輸入欄位 (例如評論區) 在網站上隱藏他們的程式碼。如果網站不驗證評論區的輸入,攻擊者就可以嵌入 HTML 標籤,在新訪客載入頁面時執行。
基於 DOM 的跨網站指令碼
基於 DOM 的 XSS 會修改並注入程式碼到瀏覽者瀏覽器上的網域物件模型 (DOM)。只影響用戶端,伺服器上的回應保持不變。例如將網址中的非結構化資料寫入網頁的網站。
識別 XSS 脆弱性及預防攻擊的最佳作法
遵循網路路應用程式安全最佳實務,您就能保護您的網站訪客,並維護您的聲譽。
Identify 網路應用程式 脆弱性
第一步是檢查您的網路路應用程式是否有受到 XSS 攻擊。 您可以手動或透過專用工具來完成:
- 手動程式碼檢閱:進行程式碼分析,找出不良份子可能將惡意指令碼注入網站的弱點。此外,您可以使用測試攻擊有效負載來判斷是否有可能在造訪您網站的瀏覽器上執行良性指令碼。
- 自動化網路弱性掃描程式: 可使用工具掃描網路應用程式並識別 XSS 脆弱性。 這些通常使用靜態和動態 JavaScript 分析。
驗證輸入
您的網路路應用程式需要強大的輸入驗證步驟,以清除所有使用者輸入。 範例包括
- 驗證網址有安全的通訊協定。
- 檢查使用者提供的數值是否只包含整數。
- 確保輸入具有預期的字元集。
藉由封鎖無效的輸入,您可以大大地防止不受信任的來源將程式碼注入您的網站。
編碼輸出
下一步是對寫入網站的所有使用者控制資料進行編碼。所需的編碼取決於上下文,可能需要多種組合,例如同時使用 Javascript 和 HTML 兩層編碼。
執行內容安全政策
如果這兩種預防技術都失敗,內容安全政策 (CSP) 有助於減輕 XSS 攻擊的影響。它們可限制外部指令碼是否載入,讓您指定它們只能從相同來源載入。透過適當的 CSP 執行,即使攻擊者能夠注入惡意程式碼,也能降低 XSS 攻擊的成功率。
設定只適用於 HTTP 的 cookies
透過標記 HTTP-only cookies,會話 cookies 只能由用戶端腳本擷取。這會阻擋 JavaScript 程式碼的存取,大幅降低會話被 XSS 劫持的機會。
實施網路應用程式防火牆
最後,實施網路應用程式防火牆 (WAF)可監控並過濾流量,讓您能夠針對 XSS 攻擊制定並執行安全政策。 這包括掃描網址和其他輸入欄位,以識別和攔截反映給使用者的惡意程式碼。 許多 WAF 現在也包含人工智慧和機器學習技術,可分析上下文資訊,並發現使用未知 XSS 攻擊變種繞過安全政策的企圖。
使用 Check Point 的 Check Point WAF 保護您的網路應用程式
Check Point WAF Check Point 是領先的預防為先網路應用程式防火牆,結合了情境人工智慧,以保護您的應用程式免受已知和未知的威脅。 瞭解更多關於Check Point WAF 的資訊,包括如何透過 WAF 即服務 (WAFaaS) 在幾分鐘內完成部署。
