最规范方式是通过 Spring Security 统一管理响应头:自动启用默认安全头(如 X-Content-Type-Options、X-Frame-Options 等),显式配置 CSP、Referrer-Policy 和 Permissions-Policy,并避免手动加头或错误 CORS 设置。

在 Spring Boot 中配置 HTTP 响应头增强安全性,最规范、可维护的方式是通过 Spring Security 统一管理。它不是给每个接口手动加 header,而是通过安全策略层自动注入关键防护头,覆盖全站请求,避免遗漏和重复。
用 Spring Security 启用默认安全头
Spring Security 2.7+(对应 Spring Boot 2.7+)已内置一套合理默认的安全响应头。只需引入 spring-boot-starter-security 依赖,不写任何配置,就会自动启用:
-
X-Content-Type-Options: nosniff—— 阻止浏览器 MIME 类型嗅探,防范脚本误执行 -
X-Frame-Options: DENY—— 默认禁止页面被嵌入 iframe,防点击劫持 -
X-XSS-Protection: 1; mode=block—— 启用旧版浏览器 XSS 过滤(现代浏览器已弃用,但保留无害) -
Strict-Transport-Security: max-age=31536000 ; includeSubDomains—— 强制 HTTPS(仅当应用实际运行在 HTTPS 下时生效)
显式配置 CSP(内容安全策略)
CSP 是防御 XSS 的核心手段,需按业务明确资源来源。推荐在 SecurityConfig 中配置:
http.headers()
.contentSecurityPolicy("default-src 'self'; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline'; img-src * data:; font-src 'self'; connect-src 'self'; form-action 'self'; frame-ancestors 'none'; base-uri 'self'; object-src 'none'");
说明:
立即学习“Java免费学习笔记(深入)”;
-
'unsafe-inline'仅在开发期临时允许,上线前应替换为nonce或哈希值 -
frame-ancestors 'none'比X-Frame-Options更现代,优先级更高 -
report-uri或report-to可加上用于收集违规行为,便于监控调优
补充关键头:Referrer-Policy 和 Permissions-Policy
这两项控制信息泄露与浏览器能力调用,建议显式设置:
-
Referrer-Policy: strict-origin-when-cross-origin—— 跨域请求只发送源站信息,不泄露路径参数 -
Permissions-Policy: geolocation=(), camera=(), microphone=(), payment=()—— 明确禁用敏感 API,防止恶意站点滥用
可在 SecurityFilterChain 中链式添加:
.headers(headers -> headers
.referrerPolicy("strict-origin-when-cross-origin")
.permissionsPolicy("geolocation=(), camera=(), microphone=(), payment=()")
)
避免常见错误配置
有些做法看似增强安全,实则无效甚至有害:
- 不要用
@ResponseHeader或拦截器逐个接口加头 —— 易漏、难维护、无法覆盖静态资源 - 不要对所有 origin 允许 CORS 并开启
allowCredentials(true)—— 这会直接绕过同源策略,引发严重风险 - 不要在生产环境启用
'unsafe-eval'或'unsafe-inline',除非你完全掌控全部前端代码且做了 nonce 校验 - HSTS 头只应在 HTTPS 环境下启用;若强制配置却未部署证书,会导致整个站点不可访问


















