Spec-Zone.ru › Web APIs

CSPViolationReportBody: свойство originalPolicy

Чтение-только свойство originalPolicy интерфейса CSPViolationReportBody — это строка, представляющая Политику безопасности содержимого (CSP), чьё применение выявило нарушение.

Это строка в заголовке HTTP ответа Content-Security-Policy, которая содержит список директивы и их значения, определяющие политику CSP. Обратите внимание, что это отличается от effectiveDirective, которая является конкретной директивой, нарушающейся (и которая может не быть явно указана в политике, если используется default-src).

Значение

Строка, представляющая политику, чьё применение выявило нарушение.

Примеры

Нарушение CSP для инлайнового скрипта

В этом примере запускается нарушение CSP с помощью инлайнового скрипта, и нарушение сообщается с помощью ReportingObserver. В частности, он регистрирует effectiveDirective и originalPolicy, что делает разницу ясной.

HTML

В файле HTML ниже используется элемент <meta> для установки политики Content-Security-Policy default-src в self, что позволяет загружать скрипты и другие ресурсы с одного домена, но не позволяет выполнять инлайновые скрипты. Документ также содержит инлайновый скрипт, который должен вызвать нарушение CSP.

<!doctype html>
<html lang="en">
  <head>
    <meta
      http-equiv="Content-Security-Policy"
      content="default-src 'self'; report-to csp-endpoint" />
    <!-- This is the (original) CSP policy -->
    <meta
      http-equiv="Reporting-Endpoints"
      content="csp-endpoint='https://example.com/csp-reports'" />
    <script src="main.js"></script>
    <title>CSP: Violation due to inline script</title>
  </head>
  <body>
    <h1>CSP: Violation due to inline script</h1>
    <script>
      const int = 4;
    </script>
  </body>
</html>

JavaScript (main.js)

В документе выше также загружается внешний скрипт main.js, который показан ниже. Поскольку он загружается с того же домена, что и HTML, он не блокируется CSP.

Скрипт создаёт новый ReportingObserver для наблюдения за отчётами о нарушениях содержимого типа "csp-violation". Каждый раз, когда вызывается функция обратного вызова, мы получаем тело первого элемента массива отчётов и используем его для регистрации effectiveDirective и originalPolicy нарушения в консоли.

// main.js
const observer = new ReportingObserver(
  (reports, observer) => {
    console.log(`effectiveDirective: ${reports[0].body.effectiveDirective}`);
    // effectiveDirective: script-src-elem
    console.log(`originalPolicy: ${reports[0].body.originalPolicy}`);
    // originalPolicy: default-src 'self'; report-to csp-endpoint
  },
  {
    types: ["csp-violation"],
    buffered: true,
  },
);

observer.observe();

Обратите внимание, что в возвращаемом массиве может быть несколько отчётов, но для краткости мы регистрируем только значения первого элемента.

Результаты

Вывод консоли для приведенного выше кода:

effectiveDirective: script-src-elem
originalPolicy: default-src 'self'; report-to csp-endpoint

Обратите внимание, что originalPolicy соответствует содержимому <meta> директивы Content-Security-Policy в HTML и указывает, что политика по умолчанию self (default-src 'self').

effectiveDirective равно script-src-elem, что определяет допустимые источники для элементов JavaScript <script>. Это конкретная директива, которая была нарушена, даже если default-src была установлена в политике.

Спецификации

Спецификация
Политика безопасности содержимого уровня 3
# dom-cspviolationreportbody-originalpolicy

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
originalPolicy 74 79 Нет 56 предварительный просмотр 74 Нет 48 Нет 10.0 74

См. также

  • SecurityPolicyViolationEvent.originalPolicy

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/CSPViolationReportBody/originalPolicy

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API