【问题标题】:Can Tomcat 7 be configured to insert "Content-Security-Policy" HTTP header?可以将 Tomcat 7 配置为插入“Content-Security-Policy”HTTP 标头吗?
【发布时间】:2016-05-18 17:20:23
【问题描述】:

可以将 Tomcat 7 配置为在每个响应中插入 Content-Security-Policy: frame-ancestors 'self' HTTP 标头,就像它可以插入其他与安全相关的标头一样,例如 X-Frame-Options

【问题讨论】:

    标签: http security tomcat7 content-security-policy


    【解决方案1】:

    一旦使用Tomcat 7.x built in filters 无法实现,您可以尝试以下选项之一:

    在您的应用程序中创建过滤器

    如果向您的应用程序添加过滤器是一个选项,您可以使用以下代码为每个响应添加标头:

    @WebFilter("/*")
    public class MyFilter implements Filter {
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, 
                             FilterChain chain) throws IOException, ServletException {
    
            HttpServletResponse httpResponse = (HttpServletResponse) response;
            httpResponse.setHeader("Content-Security-Policy", "frame-ancestors 'self'");
    
            chain.doFilter(request, response);
        }
    }
    

    在 Tomcat 中创建自定义阀门

    另一种选择是定制阀门。引用此page 中的步骤:

    1. 创建一个 Maven Java 应用程序。

    2. 添加以下依赖:

    <dependency>
        <groupid>org.apache.tomcat</groupId>
        <artifactid>tomcat-catalina</artifactId>
        <version>7.0.34</version>
        <scope>provided</scope>
     </dependency>
    
    1. 创建您的 Java 类并从 ValveBase 扩展它。

    2. 实现invoke(Request, Response)方法。

    3. 构建您的库 (.jar) 文件

    4. 将库安装在${tomcat.home}/lib 目录中。

    5. 配置server.xml 以使用您的新阀门。例如:

    <valve className="com.example.MyValve"/>
    
    1. 启动服务器以查看新阀门的运行情况

    你的阀门实现可能是这样的:

    public class MyValve extends ValveBase {
    
        @Override
        public void invoke(Request request, Response response) throws IOException, 
                                                                      ServletException {
    
            HttpServletResponse httpResponse = response.getResponse();
            httpResponse.setHeader("Content-Security-Policy", "frame-ancestors 'self'");
    
            getNext().invoke(request, response);
        }
    }
    

    【讨论】:

    • 感谢您的回答。我应该提到“无需更改代码”。
    • @PeterKlimczak 我认为定制阀门可以解决问题。我会更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 2018-05-12
    • 2013-01-13
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 2019-09-24
    相关资源
    最近更新 更多