可以将 Tomcat 7 配置为插入“Content-Security-Policy”HTTP 标头吗?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 中的步骤:

    创建一个 Maven Java 应用程序。

    添加以下依赖:

<dependency>
    <groupid>org.apache.tomcat</groupId>
    <artifactid>tomcat-catalina</artifactId>
    <version>7.0.34</version>
    <scope>provided</scope>
 </dependency>

    创建您的 Java 类并从 ValveBase 扩展它。

    实现invoke(Request, Response)方法。

    构建您的库 (.jar) 文件

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

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

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

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

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 我认为定制阀门可以解决问题。我会更新我的答案。

以上是关于可以将 Tomcat 7 配置为插入“Content-Security-Policy”HTTP 标头吗?的主要内容,如果未能解决你的问题,请参考以下文章

阿里云Linux系统安装配置Tomcat方法

为 Tomcat 7 配置 SSL 会导致 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误

CentOS 7配置tomcat https并改端口为443

tomcat7-maven-plugin 插件调用本地的tomcat吗

怎样在windows服务器下配置tomcat

Tomcat的安装与配置