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

是否应为SpringBoot应用的静态文件添加安全响应头?

静态资源安全头的必要性及风险说明

1. 要不要给图片、JS这类静态资源加安全头?

当然建议加。虽然静态资源不像业务接口或页面那样直接处理用户输入,但安全头能给应用多套一层防护,对付一些间接攻击场景很有用。

2. 不加安全头会有啥风险?

逐个说下你提到的几个安全头对应的风险:

  • Strict-Transport-Security (HSTS):如果静态资源存在HTTP访问的可能(哪怕主站是HTTPS),攻击者可能通过中间人攻击篡改这些文件——比如把正常JS换成带恶意代码的版本。HSTS会强制浏览器只用HTTPS请求资源,从根源避免这种降级攻击。
  • X-XSS-Protection:图片、CSS本身不会执行脚本,但如果JS文件被篡改(比如通过未加密的传输渠道),浏览器加载恶意JS时,这个头能在一定程度上阻止反射型XSS攻击的执行。
  • Content-Security-Policy (CSP):这是最关键的一个。CSP能限制静态资源的加载来源,比如只允许从你的域名或可信CDN加载JS、CSS、图片,防止攻击者通过注入第三方恶意资源搞事情。另外,CSP还能禁止内联脚本执行,就算静态资源被篡改,也能限制恶意代码跑起来。

3. Spring Boot里怎么给静态资源加安全头?

你用web.ignoring()跳过了Spring Security过滤器,那可以用这两种方式补:

  • 自定义Filter专门处理静态资源的响应头:
@Component
public class StaticResourceSecurityHeaderFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        // 设置HSTS
        httpResponse.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains");
        // 设置X-XSS-Protection
        httpResponse.setHeader("X-XSS-Protection", "1; mode=block");
        // 设置CSP(按你实际需求调整规则)
        httpResponse.setHeader("Content-Security-Policy", "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:;");
        chain.doFilter(request, response);
    }
}
  • 或者用Spring Boot内置的资源配置(2.2及以上版本支持),在application.properties里加:
spring.resources.headers.strict-transport-security=max-age=31536000; includeSubDomains
spring.resources.headers.x-xss-protection=1; mode=block
spring.resources.headers.content-security-policy=default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:;

总结

哪怕是静态资源,加安全头也能明显提升应用的安全性,挡掉不少潜在攻击。赶紧用上面的方法补上这些防护吧。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:11:16