如何在Tomcat9中通过web.xml配置添加Content Security Policy响应头
Tomcat配置Content Security Policy响应头方法
你完全可以使用和配置X-Frame响应头相同的web.xml修改方式添加CSP响应头,具体操作如下:
配置路径选择
- 要对Tomcat下所有应用生效:修改Tomcat安装目录下的
conf/web.xml文件 - 仅对单个应用生效:修改对应应用目录下的
WEB-INF/web.xml文件
具体配置步骤
如果你之前已经配置过X-Frame相关的HttpHeaderSecurityFilter,只需要在原有filter的init-param中新增CSP相关的参数即可,无需重复创建过滤器。
完整配置示例如下:
<filter> <filter-name>httpHeaderSecurity</filter-name> <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class> <async-supported>true</async-supported> <!-- 原有X-Frame相关配置可保留 --> <init-param> <param-name>antiClickJackingEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>antiClickJackingOption</param-name> <param-value>SAMEORIGIN</param-value> </init-param> <!-- 新增CSP相关配置 --> <init-param> <param-name>contentSecurityPolicyEnabled</param-name> <param-value>true</param-value> </init-param> <!-- 此处为CSP规则示例,需根据自身业务场景调整 --> <init-param> <param-name>contentSecurityPolicy</param-name> <param-value>default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:</param-value> </init-param> </filter> <!-- 过滤器映射,已配置过可跳过 --> <filter-mapping> <filter-name>httpHeaderSecurity</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping>
常用配置说明
- 测试阶段可以开启仅上报模式,规则不实际拦截违规请求,方便调整CSP规则:
<init-param> <param-name>contentSecurityPolicyReportOnly</param-name> <param-value>true</param-value> </init-param>
contentSecurityPolicy参数值完全遵循标准CSP语法,可根据业务需要自定义资源加载来源、是否允许内联脚本/样式等规则。
验证方式
配置完成后重启Tomcat,访问应用任意路径,在浏览器开发者工具的网络请求面板中查看响应头,确认存在Content-Security-Policy字段即配置成功。
内容的提问来源于stack exchange,提问作者Puneet Talwar
相关产品推荐
相关产品推荐

