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 :

  1. Ajoutez l’intergiciel CSP à votre réglage MIDDLEWARE:

    Code
    MIDDLEWARE = [
        # ...
        "django.middleware.csp.ContentSecurityPolicyMiddleware",
        # ...
    ]
    
  2. 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 :

    Code
    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 :

  1. Inclure la valeur du substituant NONCE dans les réglages CSP. Cela ne s’applique qu’aux directives script-src ou style-src:

    Code
    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. 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:

    Code
    TEMPLATES = [
        {
            "BACKEND": "django.template.backends.django.DjangoTemplates",
            "OPTIONS": {
                "context_processors": [
                    # ...
                    "django.template.context_processors.csp",
                ],
            },
        },
    ]
    
  3. Dans vos gabarits, ajoutez l’attribut nonce aux balises <style> ou <script> concernées, en utilisant la variable de contexte csp_nonce:

    Django template
    <style nonce="{{ csp_nonce }}">
      /* These inline styles will be allowed. */
    </style>
    
    <script nonce="{{ csp_nonce }}">
      // This inline JavaScript will be allowed.
    </script>