Директива предка фреймов Content Security Policy не работает в элементе <meta> - PullRequest
0 голосов
/ 01 ноября 2018

В рамках кликджекинга мы пытаемся добавить заголовки 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, она загружается. Мы тестировали в Google Chrome.

Чтобы исправить это, мы создали угловой проект, переместили файлы в dist в веб-приложение, добавили фильтр для добавления заголовков 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 не работает при добавлении в метатег? Я даже проверил https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy, и они упоминают о добавлении CSP в метатег.

Я знаю, что X-FRAME-OPTIONS не поддерживают метатеги html. То же самое и с Content-Security-Policy? Или chrome игнорирует CSP в метатеге?

1 Ответ

0 голосов
/ 01 ноября 2018

Спецификации требуют, чтобы браузеры игнорировали frame-ancestors, если указано в политике meta -элемента.

Таким образом, чтобы применить политику frame-ancestors, вы должны использовать заголовок Content-Security-Policy.


Технические характеристики

См. https://w3c.github.io/webappsec-csp/#meta-element в спецификации CSP, а именно это:

Примечание. Заголовок Content-Security-Policy-Report-Only не поддерживается внутри элемента meta. Также нет директив report-uri, frame-ancestors и sandbox.

https://html.spec.whatwg.org/multipage/semantics.html#attr-meta-http-equiv-content-security-policy, шаг 4 алгоритма Состояние политики безопасности контента (http-equiv="content-security-policy ") (« Эта прагма применяет политику безопасности контента для Document ») в спецификации HTML требуется:

Удалить все вхождения директив report-uri, frame-ancestors и sandbox

...