Spec-Zone.ru › Web APIs

CSPViolationReportBody: свойство columnNumber

Чтение-только свойство columnNumber интерфейса CSPViolationReportBody указывает номер столбца в исходном файле, который вызвал нарушение Политики безопасности содержимого (CSP).

Обратите внимание, что браузер извлекает значение из глобального объекта файла, который вызвал нарушение. Если ресурс, вызвавший нарушение CSP, не загружен, значение будет null. Дополнительную информацию см. в CSPViolationReportBody.sourceFile.

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

Значение

Целое число, содержащее номер столбца, вызвавшего нарушение, или 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-columnnumber

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

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

См. также

  • SecurityPolicyViolationEvent.columnNumber

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

Spec-Zone.ru

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