CSPViolationReportBody: свойство documentURL
Свойство documentURL только для чтения интерфейса CSPViolationReportBody — это строка, представляющая URL документа или работника, нарушившего политику безопасности содержимого (CSP).
Значение
Строка, содержащая URL документа или работника, нарушившего CSP.
Примеры
Нарушение CSP встроенного скрипта, показывающего источник
Этот пример вызывает нарушение CSP с помощью встроенного скрипта и сообщает о нарушении с помощью ReportingObserver. Мы переходим на страницу с другой страницы и регистрируем referrer, documentURL, и blockedURL.
HTML
Сначала определим страницу источника /bounce/index.html. Эта страница просто содержит ссылку на другую страницу ../report_sample/index.html.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<ul>
<li><a href="../report_sample/">report sample</a></li>
</ul>
</body>
</html>
Ниже определяется HTML-файл ../report_sample/index.html. Он использует элемент <meta>, чтобы установить Content-Security-Policy script-src-elem в значение self, что разрешает загрузку скриптов с того же домена, но не разрешает выполнение встроенных скриптов. Документ также включает встроенный скрипт, который вызовет нарушение CSP.
<!doctype html>
<!-- /report_sample/index.html -->
<html lang="en">
<head>
<meta
http-equiv="Content-Security-Policy"
content="script-src-elem 'self' 'report-sample'" />
<script src="main.js"></script>
</head>
<body>
<script>
const int = 4;
</script>
</body>
</html>
JavaScript (main.js)
Пример отчета также загружает внешний скрипт main.js, который показан ниже. Поскольку он загружается с того же домена, что и HTML, он не блокируется CSP.
Скрипт создает новый ReportingObserver для наблюдения за отчетами о нарушениях содержимого типа "csp-violation". Каждый раз, когда вызывается функция обратного вызова, мы получаем тело первого элемента массива отчетов и используем его для регистрации нарушения documentURL, referrer, и blockedURL в консоли.
// main.js
const observer = new ReportingObserver(
(reports, observer) => {
console.log(`documentURL: ${reports[0].body.referrer}`);
console.log(`referrer: ${reports[0].body.referrer}`);
console.log(`blockedURL: ${reports[0].body.blockedURL}`);
},
{
types: ["csp-violation"],
buffered: true,
},
);
observer.observe();
Обратите внимание, что, хотя в возвращаемом массиве может быть несколько отчетов, для краткости мы регистрируем только значения первого элемента.
Результаты
Вывод консоли для приведенного выше кода будет примерно таким (сайт будет зависеть от того, как страницы обслуживаются):
documentURL: http://127.0.0.1:9999/report_sample/ referrer: http://127.0.0.1:9999/bounce/ blockedURL: inline
Обратите внимание, что referrer — это страница, с которой мы перешли, documentURL — это страница с нарушением CSP, а blockedURL в данном случае не URL, а указание на то, что нарушение было вызвано встроенным скриптом.
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
documentURL |
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/documentURL