Tomcat如何配置X-Content-Type-Options、X-XSS-Protection、Content-Security-Policy、X-Frame-Options
Contents
零 项目背景
厦门信托技改基金供应链系统,在第三方执行渗透测试过程中,提示有下列低风险:
- X-Frame-Options响应头缺失;
- Content-Security-Policy响应头缺失;
访问路径均是:https://jggyl.xmitic.com:8071/project/login
风险复现的方法是,浏览器访问上述URL地址,调试模式下,查看login的响应头。
一 解决方案
当前项目是通过在docker容器里运行tomcat来启动的。
1 解决X-Frame-Options响应头缺失的方案:
首先,单独运行tomcat image来启动一个容器,进入容器中,修改web.xml文件,在该文件中添加下述配置:
<filter> <filter-name>httpHeaderSecurity</filter-name> <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class> <init-param> <param-name>antiClickJackingOption</param-name> <param-value>SAMEORIGIN</param-value> </init-param> <async-supported>true</async-supported> </filter> <filter-mapping> <filter-name>httpHeaderSecurity</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
然后,退出container。将该运行着的container,制作成一个新的tomcat image。命令类似如下:
docker commit -a "黄伟" -m "修复tomcat低微漏洞" container_id new_tomcat_bugfix:v1.0
最后,再用这个新的image来启动container,并运行程序即可。经验证,可以修复该低微漏洞。
2 解决Content-Security-Policy响应头缺失的方案
通过在程序代码里自定义一个过滤器,使其实现一个Filter,给请求头添加该策略。如:
HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setHeader("Content-Security-Policy", "frame-ancestors 'self'"); //httpResponse.setHeader("Content-Security-Policy", "default-src 'self';connect-src *; script-src 'self' 'unsafe-eval' 'unsafe-inline';style-src 'self' 'unsafe-inline';img-src 'self' * data: ; frame-ancestors 'self'");
这里,具体实现是由开发同事完成。
二 漏洞修复验证
通过访问https://jggyl.xmitic.com:8071/project/login,然后查看: