可以将 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 标头吗?的主要内容,如果未能解决你的问题,请参考以下文章
为 Tomcat 7 配置 SSL 会导致 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误
CentOS 7配置tomcat https并改端口为443