代码之家  ›  专栏  ›  技术社区  ›  Krishna Chaitanya

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

  •  2
  • Krishna Chaitanya  · 技术社区  · 7 年前

    <!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加载时,它会加载。我们已经在谷歌chrome上进行了测试。

    为了解决这个问题,我们构建了angular项目,将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
    
        }
    
    }
    

    这很管用。

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

    我知道X-FRAME-OPTIONS不支持html元标记。内容安全策略也一样吗?或者chrome忽略了meta标签中的CSP?

    1 回复  |  直到 7 年前
        1
  •  5
  •   sideshowbarker    7 年前

    这些规范要求浏览器忽略 frame-ancestors 如果在 meta -元素策略。

    框架祖先 策略,您必须使用 Content-Security-Policy 标题。


    https://w3c.github.io/webappsec-csp/#meta-element 在CSP规范中,特别是:

    注:以下为 Content-Security-Policy-Report-Only 标题为 内支撑 元素。他们也不是 report-uri , 框架祖先 sandbox 指令。

    https://html.spec.whatwg.org/multipage/semantics.html#attr-meta-http-equiv-content-security-policy ,步骤4 http-equiv="content-security-policy ") 算法( 此pragma在 Document )在HTML规范中,需要:

    删除所有出现的 报表uri 框架祖先 ,和 沙箱 指令

    推荐文章