# Django 6.0.7 documentation

# Hur man använder Djangos Content Security Policy

## Grundläggande konfiguration

Så här aktiverar du Content Security Policy (CSP) i ditt Django-projekt:

1. Lägg till CSP-mellanprogramvaran till din `MIDDLEWARE`-inställning:

       MIDDLEWARE = [
           # ...
           "django.middleware.csp.ContentSecurityPolicyMiddleware",
           # ...
       ]

2. 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/",
       }

## Nonce-konfiguration

För att använda nonces i din CSP-policy måste du, förutom den grundläggande konfigurationen, göra följande:

1. 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],
       }

2. 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",
                   ],
               },
           },
       ]

3. 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 %}

   Changed in Django 6.1:

   The `csp_nonce_attr` template tag was added, including support for rendering `Media` objects.

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.