CSPViolationReportBody: образец свойства
Свойство sample только для чтения интерфейса CSPViolationReportBody — это строка, содержащая часть ресурса, нарушившего политику Content Security Policy (CSP).
Этот образец обычно содержит первые 40 символов встроенного скрипта, обработчика событий или стилей, нарушивших ограничение CSP. Если образец не заполнен, он представляет собой пустую строку "".
Обратите внимание, что этот образец заполняется только при попытке загрузить встроенные скрипты, обработчики событий или стили, нарушающие правила CSP script-src* и style-src* — внешние ресурсы, нарушающие CSP, образец не генерируют. Кроме того, образец включается только если нарушающая директива Content-Security-Policy также содержит ключевое слово 'report-sample'.
Примечание: Отчёты о нарушениях следует рассматривать как данные, контролируемые злоумышленниками. Содержимое этого поля в особенности должно быть очищено перед сохранением или отображением.
Значение
Строка, содержащая образец встроенного ресурса, нарушившего CSP, обычно первые 40 символов или пустая строка.
Примеры
Нарушение CSP встроенным скриптом
В этом примере возникает нарушение CSP с использованием встроенного скрипта, и нарушение отчитывается с помощью ReportingObserver. Мы также добавляем 'report-sample' в CSP, чтобы заполнить sample в теле.
HTML
В приведенном ниже HTML-файле используется элемент <meta> для установки Content-Security-Policy script-src-elem на self, что разрешает загрузку скриптов с того же домена, но не позволяет выполнять встроенные скрипты. Мы включаем 'report-sample' в директиву, чтобы был сгенерирован образец. В документе также есть встроенный скрипт, который должен вызвать нарушение CSP.
<!doctype html>
<html lang="en">
<head>
<meta
http-equiv="Content-Security-Policy"
content="script-src-elem 'self' 'report-sample'" />
<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". Каждый раз, когда вызывается функция обратного вызова, мы получаем тело первого элемента массива отчётов и используем его для записи нарушения sample в консоль.
// main.js
const observer = new ReportingObserver(
(reports, observer) => {
console.log(`sample: ${reports[0].body.sample}`);
},
{
types: ["csp-violation"],
buffered: true,
},
);
observer.observe();
Обратите внимание, что в возвращаемом массиве может быть несколько отчётов, но для краткости мы записываем только значения первого элемента.
Результаты
Вывод консоли для приведенного выше кода:
sample: const int = 4;
В этом случае образец содержит всё содержимое встроенного скрипта.
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
sample |
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/sample