Spec-Zone.ru › Web APIs

CSPViolationReportBody: свойство lineNumber

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

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

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

Значение

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

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

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

См. также

  • SecurityPolicyViolationEvent.lineNumber

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

Spec-Zone.ru

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