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> элемента.
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
См. также
© 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