CSP: report-uri
Obsolète: Cette fonctionnalité a été supprimée des standards du Web. Bien que quelques navigateurs puissent encore la supporter, elle est en cours d'éradication. Ne l'utilisez ni dans d'anciens projets, ni dans de nouveaux. Les pages et applications Web l'utilisant peuvent cesser de fonctionner à tout moment.
La directive HTTP Content-Security-Policy
(CSP) report-uri
demande à l'agent utilisateur de rapporter les violations de règles CSP. Ces rapports de violation sont constituées d'un document JSON envoyé via une requête HTTP POST à l'URI fournie.
Attention :
Bien que la directive report-to
est prévue remplacer la directive report-uri
maintenant dépréciée, report-to
n'est pas encore supportée par la plupart des navigateurs modernes. Par rétrocompatibilité avec les navigateurs courants et tout en prévoyant une compatibilité future quand les navigateurs supporteront report-to
, vous pouvez spécifier les deux directives report-uri
et report-to
:
Content-Security-Policy: ...; report-uri https://endpoint.com; report-to groupname
Dans les navigateurs qui supportent report-to
, la directive report-uri
sera ignorée.
Cette directive n'a aucun effet en elle-même, mais prend tout son sens en étant combinée à d'autres directives.
Version de CSP | 1 |
---|---|
Type de directive | Reporting directive |
Cette directive n'est pas supportée dans l'élément
<meta> .
|
Syntaxe
Content-Security-Policy: report-uri <uri>; Content-Security-Policy: report-uri <uri> <uri>;
- <uri>
-
Une URI où envoyer la requête POST contenant le rapport de violation.
Exemples
Voir Content-Security-Policy-Report-Only
pour plus d'informations et d'exemples.
Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/
/csp-violation-report-endpoint/
pourrait par exemple exécuter un script PHP similaire au suivant qui journaliserait le JSON détaillant la violation et, si elle est la première ajoutée au journal, enverrait un courril à l'administrateur :
<?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);
}
Spécifications
Specification |
---|
Content Security Policy Level 3 # directive-report-uri |
Compatibilité des navigateurs
BCD tables only load in the browser