Spec-Zone.ru › Web APIs

CSPViolationReportBody: свойство sourceFile

Чтение только свойство sourceFile интерфейса CSPViolationReportBody указывает на URL файла источника, который нарушил Политику безопасности контента (CSP).

При нарушении, вызванном использованием встроенного скрипта, sourceFile является URL текущего документа. Аналогично, если документ успешно загружает скрипт, который затем нарушает политику CSP документа, sourceFile является URL скрипта.

Обратите внимание, что если документ с CSP, блокирующей внешние ресурсы, пытается загрузить внешний ресурс, sourceFile будет null. Это происходит потому, что браузер извлекает значение из глобального объекта файла, который вызвал нарушение. Из-за ограничения CSP внешний ресурс никогда не загружается и, следовательно, не имеет соответствующего глобального объекта.

Это свойство наиболее полезно вместе с CSPViolationReportBody.lineNumber и CSPViolationReportBody.columnNumber, которые предоставляют местоположение в файле, которое привело к нарушению.

Значение

Строка, содержащая URL файла, который вызвал нарушение, или null.

Примеры

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

Этот пример вызывает нарушение CSP с использованием встроенного скрипта и сообщает о нарушении с помощью ReportingObserver.

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(`sourceFile: ${cspViolationBody.sourceFile}`);
    console.log(`lineNumber: ${cspViolationBody.lineNumber}`);
    console.log(`columnNumber: ${cspViolationBody.columnNumber}`);
  },
  {
    types: ["csp-violation"],
    buffered: true,
  },
);

observer.observe();

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

Результаты

Вы можете попробовать это с помощью локального сервера. Скопируйте приведенный выше код в test/index.html и test/main.js и запустите сервер в корневой директории. Предполагая, что адрес локального сервера http://127.0.0.1:9999, вы можете загрузить файл HTML из http://127.0.0.1:9999/test/ (или http://127.0.0.1:9999/test/index.html).

При таком наборе настроек вывод лога в Chrome:

sourceFile: http://127.0.0.1:9999/test/
lineNumber: 15
columnNumber: 0

Результат аналогичен для Firefox:

sourceFile: http://127.0.0.1:9999/test/
lineNumber: 15
columnNumber: 13

Обратите внимание, что номер столбца отличается для двух браузеров. Chrome, кажется, всегда сообщает 0. Значение в Firefox представляет позицию первого символа после конца открывающего <script> элемента.

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

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

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

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

См. также

  • SecurityPolicyViolationEvent.sourceFile

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

Spec-Zone.ru

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