Java,  Tomcat

Tomcat如何配置X-Content-Type-Options、X-XSS-Protection、Content-Security-Policy、X-Frame-Options

零 项目背景

厦门信托技改基金供应链系统,在第三方执行渗透测试过程中,提示有下列低风险:

  • 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,然后查看:

三 参考链接

https://blog.csdn.net/li_wen_jin/article/details/88353763

留言