Content Security Policy : limiter les exécutions sauvages
Afin de limiter cela, il est intéressant de mettre en place un en-tête HTML ou un en-tête de HTTP signifiant au navigateur de rejeter tout ce qui n'est pas autorisé.
Commencer par tout logger (mais rien jeter)
header ("Content-Security-Policy-Report-Only:default-src 'none'; connect-src 'none' ; font-src 'none' ; form-action 'none' ; frame-ancestors 'none' ; frame-src 'none' ; img-src 'none' ; manifest-src 'none' ; media-src 'none' ; object-src 'none' ; script-src 'none' ; style-src 'none' ; worker-src 'none' ; report-uri https://tester.fournier38.fr/CSP/ ");
Nettoyer en mettant :
- 'self' pour le site courant
- 'unsafe-inline' pour exécuter les agrégations JS et les styles locaux
- https://example.com Un site extérieur autorisé en https uniquement
Enfin bloquer réellement les entrées :
header ("Content-Security-Policy:
Attention : sandbox bloque beaucoup !
allow-same-origin allow-scripts allow-formspeuvent être nécessaires
Il est possible d'autoriser un bloc de javascript spécifique au travers d'un hash. Ce hash peut être construit avec : openssl dgst -sha256 -binary script.txt | openssl enc -base64, et ajouté :
script-src 'sha256-mmQC9FEZ+CuMUHgw+7YTfhjjPUJrf4eTUcanbdPz+CY='
Tester attentivement l'application !
Une fois tout opérationnel, on va vérifier avec https://observatory.mozilla.org que tout va bien.