Spec-Zone.ru › Web APIs

CSPViolationReportBody: свойство disposition

Свойство disposition только для чтения интерфейса CSPViolationReportBody указывает, настроено ли пользовательское агент на применение нарушений Политики безопасности контента (CSP) или только на их сообщение.

Значение

Возможные значения:

"enforce"

Политика применяется, и запрос на ресурс блокируется.

"report"

Нарушение сообщается, но запрос на ресурс не блокируется.

Примеры

Пример нарушения CSP для встроенного скрипта, демонстрирующий свойство disposition

В этом примере возникает нарушение CSP с помощью встроенного скрипта, и нарушение сообщается с помощью ReportingObserver. Значение disposition регистрируется.

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" />
    <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". Каждый раз, когда вызывается обратная функция, мы получаем тело первой записи массива отчётов и используем его для вывода в консоль файла, строки и столбца нарушения.

// main.js
const observer = new ReportingObserver(
  (reports, observer) => {
    const cspViolationBody = reports[0].body;
    console.log(`disposition: ${cspViolationBody.disposition}`);
    // For example: "enforce"
  },
  {
    types: ["csp-violation"],
    buffered: true,
  },
);

observer.observe();

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

Результаты

Если предоставить указанный код, в логе будет выведено:

disposition: enforce

Примечание: Если Content-Security-Policy-Reporting-Only было включено, значение disposition было бы report. Однако, Content-Security-Policy-Reporting-Only должен быть предоставлен: его нельзя установить в элементе <meta> так, как это сделано выше.

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

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

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

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

См. также

  • SecurityPolicyViolationEvent.disposition

© 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/disposition

Spec-Zone.ru

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