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.py en utilisant SECURE_CSP ou SECURE_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/",
}
Pour utiliser des nonces dans votre politique CSP, en plus de la configuration de base, vous devez :
Inclure la valeur du substituant NONCE dans les réglages CSP. Cela ne s’applique qu’aux directives script-src ou style-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églage TEMPLATES. Cela rendra disponible dans les gabarits la valeur nonce générée sous la forme de la variable de contexte csp_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 the csp_nonce context
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 the csp_nonce_attr template 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 Media object’s assets with the nonce
applied to each element, pass the object to the csp_nonce_attr tag:
{% csp_nonce_attr form.media %}
The csp_nonce_attr template tag was added, including support for
rendering Media objects.
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.
août 05, 2026