CSP: report-uri
CSP: report-uri
Устаревшее: Эта функция больше не рекомендуется. Хотя некоторые браузеры могут её всё ещё поддерживать, она может быть удалена из соответствующих веб-стандартов, может быть в процессе удаления или может поддерживаться только для совместимости. Избегайте её использования и, если возможно, обновите существующий код; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любое время.
Устаревшая директива HTTP Content-Security-Policy (CSP) report-uri сообщает агенту пользователя об attemptциях нарушения Content Security Policy. Эти отчёты о нарушениях состоят из JSON-документов, отправляемых через HTTP-запрос POST по указанному URI.
Предупреждение: Хотя директива report-to предназначена для замены устаревшей директивы report-uri , report-to пока не поддерживается в большинстве браузеров. Поэтому для совместимости с текущими браузерами и для добавления совместимости с будущими браузерами, когда будет поддержка report-to, вы можете указать как report-uri , так и report-to:
Content-Security-Policy: …; report-uri https://endpoint.com; report-to groupname
В браузерах, которые поддерживают report-to, директива report-uri будет проигнорирована.
Эта директива сама по себе не имеет эффекта, но приобретает значение только в сочетании с другими директивами.
| Версия CSP | 1 |
|---|---|
| Тип директивы | Директива отчёта |
Эта директива не поддерживается в элементе <meta>. | |
Синтаксис
Content-Security-Policy: report-uri <uri>; Content-Security-Policy: report-uri <uri> <uri>;
- <uri>
-
URI для отправки отчёта.
Примеры
См. Content-Security-Policy-Report-Only для получения дополнительной информации и примеров.
Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/
/csp-violation-report-endpoint/ может, например, запустить PHP-скрипт, подобный следующему, который записывает JSON, описывающий нарушение, и, если нарушение является первым добавленным в журнал, отправляет электронное письмо администратору:
<?php
// Start configure
$log_file = dirname(__FILE__) . '/csp-violations.log';
$log_file_size_limit = 1000000; // bytes - once exceeded no further entries are added
$email_address = 'admin@example.com';
$email_subject = 'Content-Security-Policy violation';
// End configuration
$current_domain = preg_replace('/www\./i', '', $_SERVER['SERVER_NAME']);
$email_subject = $email_subject . ' on ' . $current_domain;
http_response_code(204); // HTTP 204 No Content
$json_data = file_get_contents('php://input');
// We pretty print the JSON before adding it to the log file
if ($json_data = json_decode($json_data)) {
$json_data = json_encode($json_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
if (!file_exists($log_file)) {
// Send an email
$message = "The following Content-Security-Policy violation occurred on " .
$current_domain . ":\n\n" .
$json_data .
"\n\nFurther CPS violations will be logged to the following log file, but no further email notifications will be sent until this log file is deleted:\n\n" .
$log_file;
mail($email_address, $email_subject, $message,
'Content-Type: text/plain;charset=utf-8');
} else if (filesize($log_file) > $log_file_size_limit) {
exit(0);
}
file_put_contents($log_file, $json_data, FILE_APPEND | LOCK_EX);
}
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | |
report-uri |
25 |
14 |
23 |
Нет |
15 |
7 |
Да |
Да |
23 |
Да |
7 |
Да |
См. также
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri