内容安全策略“框架祖先”指令在<meta />元素中不起作用

时间:2018-11-01 03:28:24

标签: content-security-policy clickjacking

作为点击劫持的一部分,我们试图将CSP标头作为元标记添加到我们的角度项目中。下面是html

<!doctype html>
<html lang="en">
<head>
  <meta http-equiv="Content-Security-Policy" content="frame-ancestors 'self'">
  <meta charset="utf-8">
  <title>QA Eval Webapp</title>
  <base href="/">

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
  <app-root></app-root>
</body>
</html>

但是,当我们尝试将网页作为iframe加载时,它就会加载。我们已经在谷歌浏览器中进行了测试。

为解决此问题,我们已经构建了角度项目,将dist下的文件移动到Web应用程序,添加了一个过滤器以将CSP标头添加到每个请求的响应中。下面是代码

package com.web.beginner;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;

@WebFilter(urlPatterns="/*", filterName = "cspfilter")
public class CSPFilter implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @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);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}

这有效。

为什么在meta标记中添加CSP标头后不起作用?我什至检查了https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy,他们提到在meta标记中添加CSP。

我知道X-FRAME-OPTIONS不支持html元标记。内容安全策略也一样吗?还是Chrome忽略了元标记中的CSP?

1 个答案:

答案 0 :(得分:2)

如果在frame-ancestors元素策略中指定了规范,则要求浏览器忽略meta

因此,要应用frame-ancestors策略,必须使用Content-Security-Policy标头。


规范引用

请参阅CSP规范中的https://w3c.github.io/webappsec-csp/#meta-element,具体请参见:

  

注意:Content-Security-Policy-Report-Only元素内不支持meta头。 report-uriframe-ancestorssandbox指令都不是。

https://html.spec.whatwg.org/multipage/semantics.html#attr-meta-http-equiv-content-security-policy内容安全策略状态(http-equiv="content-security-policy“)算法(“此实用程序在{{1 }}” )在HTML规范中,要求这样做:

  

删除所有出现的Documentreport-uriframe-ancestors指令