You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Spring Boot应用中的RFC6797(HSTS)安全漏洞问题

解决Spring Boot微服务HSTS(RFC6797)漏洞问题

问题分析

你遇到的核心问题是两种HSTS配置方式均未被安全扫描器认可,根源大概率在配置写法错误、HTTPS未启用或配置未实际生效上。

一、修复过滤器配置的错误

你当前的过滤器代码存在参数传递错误:setHeader方法的第一个参数是头名称,第二个是头值,你把两者合并成了一个参数。正确写法如下:

response.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains");

如果需要加入preload支持(符合RFC6797扩展要求),可修改为:

response.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload");

注意:分号前后不要加空格(虽规范允许,但部分严格的扫描器可能因此判定无效)。

二、修正Spring Security的HSTS配置

你提供的Spring Security配置可能存在写法或被覆盖的问题,推荐使用Spring Boot 2.7+的Lambda风格配置,确保配置生效:

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            // 启用headers配置,保证HSTS规则生效
            .headers(headersConfigurer -> headersConfigurer
                .httpStrictTransportSecurity(hstsConfigurer -> hstsConfigurer
                    .maxAgeInSeconds(31536000)  // 设置为1年,符合RFC要求的最小有效时长
                    .includeSubDomains(true)
                    .preload(true)
                )
            );
        return http.build();
    }
}

关键检查点:

  1. 必须启用HTTPS:HSTS头仅在HTTPS响应中才会被浏览器和扫描器认可,如果服务仍使用HTTP,即使配置了头也会被判定无效,需确保服务通过HTTPS对外提供。
  2. 避免配置被覆盖:检查是否有其他配置类或过滤器修改了响应头,比如是否禁用了Spring Security的默认headers配置(如headers().disable())。
  3. 验证响应头存在:使用curl -I https://你的服务域名或浏览器开发者工具的Network面板,确认响应中确实存在Strict-Transport-Security头。
  4. 代理/网关检查:如果服务部署在网关或反向代理之后,需确保代理不会移除或修改HSTS头,可在代理层同步配置HSTS或允许传递该头。

三、最终验证

完成配置修改后,重启服务,通过HTTPS访问并确认响应头包含正确的Strict-Transport-Security字段,再重新运行安全扫描即可解决漏洞问题。

内容的提问来源于stack exchange,提问作者Saradhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:41:12