CSPViolationReportBody: свойство originalPolicy
Чтение-только свойство originalPolicy интерфейса CSPViolationReportBody — это строка, представляющая Политику безопасности содержимого (CSP), чьё применение выявило нарушение.
Это строка в заголовке HTTP ответа Content-Security-Policy, которая содержит список директивы и их значения, определяющие политику CSP. Обратите внимание, что это отличается от effectiveDirective, которая является конкретной директивой, нарушающейся (и которая может не быть явно указана в политике, если используется default-src).
Значение
Строка, представляющая политику, чьё применение выявило нарушение.
Примеры
Нарушение CSP для инлайнового скрипта
В этом примере запускается нарушение CSP с помощью инлайнового скрипта, и нарушение сообщается с помощью ReportingObserver. В частности, он регистрирует effectiveDirective и originalPolicy, что делает разницу ясной.
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" />
<!-- This is the (original) CSP policy -->
<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". Каждый раз, когда вызывается функция обратного вызова, мы получаем тело первого элемента массива отчётов и используем его для регистрации effectiveDirective и originalPolicy нарушения в консоли.
// main.js
const observer = new ReportingObserver(
(reports, observer) => {
console.log(`effectiveDirective: ${reports[0].body.effectiveDirective}`);
// effectiveDirective: script-src-elem
console.log(`originalPolicy: ${reports[0].body.originalPolicy}`);
// originalPolicy: default-src 'self'; report-to csp-endpoint
},
{
types: ["csp-violation"],
buffered: true,
},
);
observer.observe();
Обратите внимание, что в возвращаемом массиве может быть несколько отчётов, но для краткости мы регистрируем только значения первого элемента.
Результаты
Вывод консоли для приведенного выше кода:
effectiveDirective: script-src-elem originalPolicy: default-src 'self'; report-to csp-endpoint
Обратите внимание, что originalPolicy соответствует содержимому <meta> директивы Content-Security-Policy в HTML и указывает, что политика по умолчанию self (default-src 'self').
effectiveDirective равно script-src-elem, что определяет допустимые источники для элементов JavaScript <script>. Это конкретная директива, которая была нарушена, даже если default-src была установлена в политике.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
originalPolicy |
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/originalPolicy