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

如何在AWS负载均衡部署的React应用中添加指定HTTP安全头策略?

解决AWS负载均衡+Java后端+React应用缺失安全头的方案

针对你提到的6种缺失的安全头,提供三种可行的配置方式,按优先级推荐:

1. 通过AWS Application Load Balancer(ALB)全局配置(推荐)

无需修改代码,直接在负载均衡层面统一添加所有安全头,覆盖所有请求:

  1. 登录AWS控制台,进入EC2服务 -> 左侧导航栏选负载均衡器
  2. 选中你的ALB,切换到监听器标签,点击编辑规则
  3. 点击添加操作,选择添加固定响应头,逐个配置以下头:
    • Strict-Transport-Security: max-age=31536000; includeSubDomains(强制HTTPS,有效期1年)
    • Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:(根据业务调整,比如添加CDN或第三方脚本域名)
    • X-Frame-Options: DENY(禁止页面被嵌入iframe)或SAMEORIGIN(仅允许同域嵌入)
    • Referrer-Policy: strict-origin-when-cross-origin(跨域时仅发送源信息,同域发送完整路径)
    • Permission-Policy: geolocation=(), microphone=(), camera=()(禁用不必要的权限,按需开放)
    • X-Content-Type-Options: nosniff(阻止浏览器猜测MIME类型)

2. 后端Java服务添加安全头

如果需要针对特定接口或业务逻辑调整,可在Java后端配置全局Filter或用框架自带的安全配置:

针对Spring Boot项目

方式A:用Spring Security配置

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.headers()
            // X-Content-Type-Options
            .contentTypeOptions()
            .and()
            // X-Frame-Options
            .frameOptions().deny()
            .and()
            // Strict-Transport-Security
            .httpStrictTransportSecurity()
                .maxAgeInSeconds(31536000)
                .includeSubDomains()
            .and()
            // Referrer-Policy
            .referrerPolicy(ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)
            .and()
            // Content-Security-Policy
            .contentSecurityPolicy("default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'")
            .and()
            // Permission-Policy
            .permissionPolicy(policy -> policy.policy("geolocation=(), microphone=(), camera=()"));
    }
}

方式B:自定义全局Filter

@Component
public class SecurityHeaderFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpResp = (HttpServletResponse) response;
        // 逐个设置安全头
        httpResp.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains");
        httpResp.setHeader("Content-Security-Policy", "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'");
        httpResp.setHeader("X-Frame-Options", "DENY");
        httpResp.setHeader("Referrer-Policy", "strict-origin-when-cross-origin");
        httpResp.setHeader("Permission-Policy", "geolocation=(), microphone=(), camera=()");
        httpResp.setHeader("X-Content-Type-Options", "nosniff");
        
        chain.doFilter(request, response);
    }
}

针对普通Java Web项目(非Spring Boot)

在web.xml中配置Filter:

<filter>
    <filter-name>SecurityHeaderFilter</filter-name>
    <filter-class>com.yourcompany.filter.SecurityHeaderFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SecurityHeaderFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Filter类代码和上述Spring Boot的自定义Filter一致。

3. React静态页面添加meta标签(仅作为补充)

注意:HTTP响应头优先级高于meta标签,仅当无法通过ALB或后端配置时使用,且Strict-Transport-Security无法通过meta标签生效:
在React项目的public/index.html中添加:

<meta http-equiv="X-Content-Type-Options" content="nosniff">
<meta http-equiv="X-Frame-Options" content="DENY">
<meta name="referrer" content="strict-origin-when-cross-origin">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'">
<meta http-equiv="Permission-Policy" content="geolocation=(), microphone=(), camera=()">

验证配置

配置完成后,可通过以下方式验证:

  • 浏览器F12打开Network面板,查看请求的响应头是否包含所有配置项
  • 用curl命令:curl -I https://your-app-domain.com

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:55:23