CSPViolationReportBody: свойство referrer
Свойство referrer только для чтения интерфейса CSPViolationReportBody — это строка, представляющая URL-адрес страницы-источника ресурса, политика безопасности контента (CSP) которого была нарушена.
Referrer — это страница, которая привела к загрузке страницы с нарушением CSP. Например, если мы перешли по ссылке на страницу с нарушением CSP, то referrer — это страница, с которой мы перешли.
Значение
Строка, представляющая URL-адрес страницы-источника со нарушением CSP, или null.
Обратите внимание, что если referrer — это HTTP(S) URL, то любое имя пользователя, пароль или фрагмент будут удалены. Если схема URL не http: или https:, то возвращается только схема.
Примеры
Нарушение CSP встроенного скрипта, показывающее referrer
В этом примере вызывается нарушение 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 для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
referrer |
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/referrer