防止 Spring 應用中的跨站腳本攻擊 (XSS)

Spring Security
Remote
0
08:29 AM · Nov 30 ,2025

1. 概述

在構建 Spring Web 應用程序時,重點關注安全性非常重要。跨站腳本攻擊 (XSS) 是 Web 安全性中最關鍵的攻擊之一。

防止 XSS 攻擊在 Spring 應用程序中是一個挑戰。Spring 提供內置幫助以實現完全保護。

在本教程中,我們將使用 Spring Security 可用的功能。

2. 跨站腳本攻擊 (XSS) 的原理是什麼?

2.1. 問題的定義

XSS 是一種常見的注入攻擊類型。在 XSS 中,攻擊者試圖在 Web 應用程序中執行惡意代碼。他們通過 Web 瀏覽器或 HTTP 客户端工具(如 Postman)與它交互。

XSS 攻擊主要有兩種類型:

  • 反射型或非持久型 XSS
  • 存儲型或持久型 XSS

在反射型或非持久型 XSS 中,不受信任的用户數據提交到 Web 應用程序,並立即在響應中返回,從而將不可信的內容添加到頁面中。Web 瀏覽器假定代碼來自 Web 服務器,並執行它。這可能會允許黑客向您發送一個鏈接,當您點擊該鏈接時,您的瀏覽器將從您使用的站點檢索您的私有數據,然後將該數據轉發到黑客的服務器。

在存儲型或持久型 XSS 中,攻擊者的輸入由 Web 服務器存儲。隨後,任何未來的訪問者都可以執行該惡意代碼。

2.2. 防禦攻擊的策略

防止 XSS 攻擊的主要策略是清理用户輸入。

在 Spring Web 應用程序中,用户的輸入是一個 HTTP 請求。為了防止攻擊,我們應該檢查 HTTP 請求的內容並刪除任何可能被服務器或瀏覽器執行的內容。

對於通過 Web 瀏覽器訪問的常規 Web 應用程序,我們可以使用 Spring Security 的內置功能(用於反射型 XSS)。

3. 使用 Spring Security 使應用程序 XSS 安全 

Spring Security 默認提供多個安全頭。它包括 X-XSS-Protection 頭。 X-XSS-Protection 告訴瀏覽器阻止 XSS 嘗試。 Spring Security 可以自動將此安全頭添加到響應中。 要啓用此功能,我們配置 Spring Security 配置類中的 XSS 支持。

使用此功能,當瀏覽器檢測到 XSS 嘗試時,不會渲染頁面。 但是,某些 Web 瀏覽器沒有實現 XSS 審計器。 在這種情況下,它們不會使用 X-XSS-Protection 頭。 為了克服這個問題,我們還可以使用 內容安全策略 (CSP) 功能。

CSP 是一種額外的安全層,有助於緩解 XSS 和數據注入攻擊。 要啓用它,我們需要配置應用程序以通過提供 SecurityFilterChain bean 返回 Content-Security-Policy 頭:

@Configuration
public class SecurityConf {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.headers(headers ->
                headers.xssProtection(
                        xss -> xss.headerValue(XXssProtectionHeaderWriter.HeaderValue.ENABLED_MODE_BLOCK)
                ).contentSecurityPolicy(
                        cps -> cps.policyDirectives("script-src 'self'")
                ));
        return http.build();
    }
}

4. 結論

在本文中,我們看到了如何通過使用 Spring Security 的 xssProtection 功能來防止 XSS 攻擊。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.