Hash de script
Le report csp-hash envoie un hash de chaque script chargé par la page, la base pour un inventaire de scripts côté navigateur.
Dernière mise à jour:
Un report csp-hash transporte le hash d'un script (ou d'une autre sous-ressource) que
la page a chargé. Contrairement à un report de violation, il ne s'agit pas d'un blocage :
vous l'activez avec une source expression 'report-sha256' et le navigateur reporte un
hash pour chaque ressource correspondante. Ce flux vous permet de construire
un inventaire des scripts réellement exécutés dans le navigateur, rattachés à une
bibliothèque, une version et des CVE connues.
Chromium uniquement
Le reporting de hash de script est activé par défaut dans Chromium, donc il fonctionne sans essai d'origine, mais il reste propre à ce moteur : Firefox et Safari ne l'envoient pas. La casse des champs diffère aussi du brouillon CSP (voir Pièges) : traitez donc le payload comme spécifique à Chromium. Voir Prise en charge par les navigateurs ci-dessous.
Quand le navigateur l'envoie
Quand une directive de type script porte 'report-sha256' (ou 'report-sha384' /
'report-sha512'), le navigateur émet un report csp-hash pour chaque ressource
correspondante qu'il charge, et affiche aussi le hash dans la console DevTools. Il reporte
au lieu de bloquer, sans rien changer à ce qui s'exécute. ReportingObserver ne voit
pas les reports de hash ; ils ne partent que vers l'endpoint.
Configuration
Reporting-Endpoints: hashes-endpoint="https://<Endpoint-ID>.report.centralcsp.com"Content-Security-Policy-Report-Only: script-src 'self' 'report-sha256'; report-to hashes-endpointExemple de payload
{
"type": "csp-hash",
"age": 12,
"url": "https://example.com/",
"user_agent": "Mozilla/5.0 ...",
"body": {
"documentURL": "https://example.com/",
"subresourceURL": "https://example.com/main.js",
"hash": "sha256-85738f8f9a7f1b04b5329c590ebcb9e425925b6c0d...",
"type": "subresource",
"destination": "script"
}
}Le body d'un report csp-hash contient ces champs, à l'intérieur de l'enveloppe de report commune.
Référence des champs
| Champ | Signification |
|---|---|
documentURL | La page sur laquelle le script s'est chargé. |
subresourceURL | L'URL du script ou de la ressource chargée. |
hash | Le hash sous la forme <alg>-<base64>, par exemple sha256-.... |
type | La catégorie de hash (par exemple subresource). |
destination | La destination de la requête, par exemple script. |
Comment le recevoir
Déclarez un endpoint et ajoutez 'report-sha256' à script-src ; gardez la politique en
Report-Only pour qu'elle ne bloque jamais. C'est exactement le mécanisme qui alimente l'inventaire
Technologies de CentralCSP,
où chaque hash reporté est rattaché à une bibliothèque, une version et des CVE connues, et
l'inventaire de scripts PCI DSS qui enregistre
le statut de revue de chaque script, sans snippet ni extension de navigateur.
Ce qu'il vous apprend sur la sécurité
Un hash de script que vous n'avez pas déployé est un signal de supply-chain : un asset de CDN altéré, un script de formjacking ou de Magecart injecté, ou un tiers inattendu. Le reporting continu des hash, couplé à des alertes sur les hash nouveaux ou modifiés, vous permet de repérer ce changement dès qu'il atteint un vrai navigateur, et non lors d'une revue post-incident.
Pièges
La casse des champs n'est pas figée : Chromium émet du camelCase (documentURL, subresourceURL) tandis que l'exemple du brouillon de l'éditeur CSP utilise du snake_case (document_url, subresource_url). Vérifiez sur une capture réelle.
Une version antérieure de la conception utilisait un mot-clé 'report-hashes' ; celui qui
a été livré est 'report-sha256' (et les variantes sha384/sha512). Le mot-clé et la forme
du report évoluent encore dans le brouillon CSP, attendez-vous donc à ce qu'ils changent.
Prise en charge par les navigateurs
Navigateurs basés sur Chromium uniquement, où il est activé par défaut. Firefox et Safari ne le prennent pas en charge. La forme des champs suit Chromium plutôt que le brouillon CSP, traitez donc tout payload capturé comme spécifique à Chromium.
Voir aussi
- mot-clé report-sha
- Content Security Policy
- report integrity-violation
- Technologies, le SBOM côté client avec détection de CVE
- Inventaire de scripts
- Monitoring des hash de script dans CentralCSP
- Header Reporting-Endpoints
- Le format de livraison des rapports