IBM WebSphere 9.0.5.13安全头配置求助:需通过securityheaders.com检测
针对IBM WebSphere 9.0.5.13配置安全头的解决方案
一、全局配置(所有部署应用生效)
通过WebSphere控制台配置全局安全头,需注意参数名称的正确性(你之前使用的旧参数在9.x版本已失效),步骤如下:
- 登录WebSphere管理控制台,导航至 服务器 > 服务器类型 > WebSphere应用服务器 > [目标服务器名称] > Web容器设置 > Web容器
- 点击定制属性,添加以下属性:
- Strict-Transport-Security:
- 属性名:
com.ibm.ws.webcontainer.addStrictTransportSecurityHeader - 属性值:
max-age=31536000;includeSubDomains;preload
- 属性名:
- X-Frame-Options:
- 属性名:
com.ibm.ws.webcontainer.XFrameOptions - 属性值:
SAMEORIGIN(或DENY,根据业务需求选择)
- 属性名:
- X-Content-Type-Options:
- 属性名:
com.ibm.ws.webcontainer.addXContentTypeOptionsHeader - 属性值:
nosniff
- 属性名:
- Strict-Transport-Security:
- 保存配置后重启服务器,此步骤必须执行,否则配置不会生效。
二、应用级配置(单个应用生效)
若只需针对特定应用配置,修改该应用的WEB-INF/web.xml文件(WAR包或EAR中Web模块的对应路径),添加以下配置:
1. 配置STS、X-Frame-Options、X-Content-Type-Options
<!-- X-Content-Type-Options --> <context-param> <param-name>com.ibm.ws.webcontainer.addXContentTypeOptionsHeader</param-name> <param-value>nosniff</param-value> </context-param> <!-- X-Frame-Options --> <context-param> <param-name>com.ibm.ws.webcontainer.XFrameOptions</param-name> <param-value>SAMEORIGIN</param-value> </context-param> <!-- Strict-Transport-Security --> <context-param> <param-name>com.ibm.ws.webcontainer.addStrictTransportSecurityHeader</param-name> <param-value>max-age=31536000;includeSubDomains;preload</param-value> </context-param>
2. 配置Content-Security-Policy(CSP)
WebSphere没有内置的CSP上下文参数,需通过自定义过滤器实现:
第一步:添加过滤器配置到web.xml
<filter> <filter-name>CSPFilter</filter-name> <filter-class>com.yourcompany.filter.CSPFilter</filter-class> <init-param> <param-name>cspPolicy</param-name> <!-- 根据应用需求调整规则,避免语法错误导致检测不通过 --> <param-value>default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'</param-value> </init-param> </filter> <filter-mapping> <filter-name>CSPFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
第二步:编写过滤器Java类
将以下代码编译后放入应用的WEB-INF/classes目录(或打包到Jar中):
import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class CSPFilter implements Filter { private String cspPolicy; @Override public void init(FilterConfig config) throws ServletException { this.cspPolicy = config.getInitParameter("cspPolicy"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse httpResp = (HttpServletResponse) response; httpResp.setHeader("Content-Security-Policy", cspPolicy); chain.doFilter(request, response); } @Override public void destroy() {} }
三、排查之前配置失效的原因
- 参数名称错误:你之前使用的
com.ibm.ws.webcontainer.ADD_STS_HEADER_WEBAPP是WebSphere 8.5及更早版本的参数,9.x版本已废弃,需使用com.ibm.ws.webcontainer.addStrictTransportSecurityHeader。 - 未重启服务器:修改Web容器定制属性后必须重启服务器,配置才会加载。
- 应用级配置覆盖全局:若应用的web.xml中存在相同参数,会覆盖全局配置,需检查应用的web.xml是否有冲突设置。
- HTTP插件拦截:若前端使用WebSphere HTTP服务器插件,检查
plugin-cfg.xml或HTTP服务器配置文件中是否有移除安全头的规则。
内容的提问来源于stack exchange,提问作者Mainak1976
相关产品推荐
相关产品推荐

