Så här aktiverar du Content Security Policy (CSP) i ditt Django-projekt:
Lägg till CSP-mellanprogramvaran till din MIDDLEWARE-inställning:
MIDDLEWARE = [
# ...
"django.middleware.csp.ContentSecurityPolicyMiddleware",
# ...
]
Konfigurera CSP-policyerna i din settings.py med antingen SECURE_CSP eller SECURE_CSP_REPORT_ONLY (eller båda). CSP-inställningsdokumentationen ger mer information om skillnaderna mellan dessa två:
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/",
}
För att använda nonces i din CSP-policy måste du, förutom den grundläggande konfigurationen, göra följande:
Inkludera platshållarvärdet NONCE i CSP-inställningarna. Detta gäller endast direktiven script-src eller 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],
}
Lägg till csp()-kontextprocessorn till din TEMPLATES-inställning. Detta gör det genererade nonce-värdet tillgängligt i Django-mallarna som kontextvariabeln csp_nonce:
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"OPTIONS": {
"context_processors": [
# ...
"django.template.context_processors.csp",
],
},
},
]
I dina mallar lägger du till attributet nonce till relevanta inline-taggarna <style> eller <script> med hjälp av kontextvariabeln csp_nonce:
<style nonce="{{ csp_nonce }}">
/* These inline styles will be allowed. */
</style>
<script nonce="{{ csp_nonce }}">
// This inline JavaScript will be allowed.
</script>
Cachning och återanvändning av nonce
ContentSecurityPolicyMiddleware hanterar automatiskt genereringen av en unik nonce och infogar lämpligt nonce-<value>-källuttryck i Content-Security-Policy- (eller Content-Security-Policy-Report-Only-) rubriken när noncen används i en mall.
För att säkerställa korrekt funktion, se till att både HTML-koden och rubriken genereras inom samma begäran och inte hämtas från cacheminnet. Se referensdokumentationen om Nonce usage för implementeringsdetaljer och viktiga överväganden kring cachning.
juni 09, 2026