Comment utiliser la politique de sécurité de contenu de Django¶
Configuration de base¶
Pour activer la politique de sécurité de contenu (CSP) dans votre projet Django :
Ajoutez l’intergiciel CSP à votre réglage
MIDDLEWARE:MIDDLEWARE = [ # ... "django.middleware.csp.ContentSecurityPolicyMiddleware", # ... ]
Configurez les politiques CSP dans votre fichier
settings.pyen utilisantSECURE_CSPouSECURE_CSP_REPORT_ONLY(ou les deux). La documentation des réglages CSP fournit plus de détails sur les différences entre les deux :from django.utils.csp import CSP # To enforce a CSP policy: SECURE_CSP = { "default-src": [CSP.SELF], # Add more directives to be enforced. } # Or for report-only mode: SECURE_CSP_REPORT_ONLY = { "default-src": [CSP.SELF], # Add more directives as needed. "report-uri": "/path/to/reports-endpoint/", }
Configuration du nonce¶
Pour utiliser des nonces dans votre politique CSP, en plus de la configuration de base, vous devez :
Inclure la valeur du substituant
NONCEdans les réglages CSP. Cela ne s’applique qu’aux directivesscript-srcoustyle-src:from django.utils.csp import CSP SECURE_CSP = { "default-src": [CSP.SELF], # Allow self-hosted scripts and script tags with matching `nonce` attr. "script-src": [CSP.SELF, CSP.NONCE], # Example of the less secure 'unsafe-inline' option. "style-src": [CSP.SELF, CSP.UNSAFE_INLINE], }
Ajoutez le processeur de contexte
csp()à votre réglageTEMPLATES. Cela rendra disponible dans les gabarits la valeur nonce générée sous la forme de la variable de contextecsp_nonce:TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "OPTIONS": { "context_processors": [ # ... "django.template.context_processors.csp", ], }, }, ]
Dans vos gabarits, ajoutez l’attribut
nonceaux balises<style>ou<script>concernées, en utilisant la variable de contextecsp_nonce:<style nonce="{{ csp_nonce }}"> /* These inline styles will be allowed. */ </style> <script nonce="{{ csp_nonce }}"> // This inline JavaScript will be allowed. </script>
Mise en cache et réutilisation de nonce
L’intergiciel ContentSecurityPolicyMiddleware gère automatiquement la génération d’un nonce unique et l’insertion de l’expression source nonce-<valeur> appropriée dans l’en-tête Content-Security-Policy (ou Content-Security-Policy-Report-Only) lorsque le nonce est utilisé dans un gabarit.
Pour garantir un comportement correct, assurez-vous que le code HTML et l’en-tête soient générés par la même requête et non servis à partir du cache. Consultez la documentation de référence sur Nonce usage pour des détails d’implémentation et des considérations importantes concernant le cache.