Comment utiliser la politique de sécurité de contenu de DjangoLien vers cette rubrique
Configuration de baseLien vers cette rubrique
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 nonceLien vers cette rubrique
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", ], }, }, ]In your templates, add the nonce to elements that require it:
For inline
<style>or<script>tags, use thecsp_noncecontext variable directly:<style nonce="{{ csp_nonce }}"> /* These inline styles will be allowed. */ </style> <script nonce="{{ csp_nonce }}"> // This inline JavaScript will be allowed. </script>For external
<script src="...">and<link rel="stylesheet">elements, use thecsp_nonce_attrtemplate tag:<script src="/path/to/script.js" {% csp_nonce_attr %}></script> <link rel="stylesheet" href="/path/to/style.css" {% csp_nonce_attr %}>To render a
Mediaobject’s assets with the nonce applied to each element, pass the object to thecsp_nonce_attrtag:{% csp_nonce_attr form.media %}