【发布时间】:2016-05-18 17:20:23
【问题描述】:
可以将 Tomcat 7 配置为在每个响应中插入 Content-Security-Policy: frame-ancestors 'self' HTTP 标头,就像它可以插入其他与安全相关的标头一样,例如 X-Frame-Options?
【问题讨论】:
标签: http security tomcat7 content-security-policy
可以将 Tomcat 7 配置为在每个响应中插入 Content-Security-Policy: frame-ancestors 'self' HTTP 标头,就像它可以插入其他与安全相关的标头一样,例如 X-Frame-Options?
【问题讨论】:
标签: http security tomcat7 content-security-policy
一旦使用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);
}
}
另一种选择是定制阀门。引用此page 中的步骤:
创建一个 Maven Java 应用程序。
添加以下依赖:
<dependency> <groupid>org.apache.tomcat</groupId> <artifactid>tomcat-catalina</artifactId> <version>7.0.34</version> <scope>provided</scope> </dependency>
创建您的 Java 类并从
ValveBase扩展它。构建您的库 (
.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);
}
}
【讨论】: