{"title":"Politique de sécurité de contenu (CSP)","version":"6.0","locale":"fr","docname":"ref/csp","url":"/fr/6.0/ref/csp/","canonical":"https://djangodocs.dev/fr/6.0/ref/csp/","summary":"La politique de sécurité de contenu (CSP) est un standard de sécurité web aidant à prévenir les attaques par injection de contenu en limitant les sources à…","html":"<h1>Politique de sécurité de contenu (CSP)<a class=\"heading-anchor\" href=\"#content-security-policy\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"version-note version-added\" data-version=\"6.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 6.0</p></aside>\n<p id=\"module-django.middleware.csp\">La politique de sécurité de contenu (CSP) est un standard de sécurité web aidant à prévenir les attaques par injection de contenu en limitant les sources à partir desquelles le contenu peut être chargé. Elle joue un rôle important dans le cadre d’une <a class=\"reference internal\" href=\"/fr/6.0/topics/security/#security-csp\"><span class=\"std std-ref\">stratégie de sécurité</span></a> complète.</p>\n<p>Pour des instructions de configuration dans un projet Django, consultez la documentation <a class=\"reference internal\" href=\"/fr/6.0/howto/csp/#csp-config\"><span class=\"std std-ref\">Utilisation de CSP</span></a>. Pour un guide HTTP au sujet de CSP, consultez le <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP\">guide MDN sur CSP</a>.</p>\n<section id=\"overview\">\n<span id=\"csp-overview\"></span><h2>Aperçu<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>La <a class=\"reference external\" href=\"https://www.w3.org/TR/CSP3/\">spécification Content-Security-Policy</a> définit deux en-têtes complémentaires :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">Content-Security-Policy</code>: applique la politique CSP, en bloquant le contenu qui viole les directives définies.</p></li>\n<li><p><code class=\"docutils literal notranslate\">Content-Security-Policy-Report-Only</code>: signale les violations CSP sans bloquer le contenu, permettant de tester sans dommage.</p></li>\n</ul>\n<p>Chaque politique est composée d’une ou de plusieurs directives avec leurs valeurs, qui indiquent ensemble au navigateur la façon de gérer des types spécifiques de contenus.</p>\n<p>Lorsque <a class=\"reference internal\" href=\"/fr/6.0/ref/middleware/#django.middleware.csp.ContentSecurityPolicyMiddleware\" title=\"django.middleware.csp.ContentSecurityPolicyMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">ContentSecurityPolicyMiddleware</code></a> est activé, Django construit et lie automatiquement les en-têtes appropriés à chaque réponse en fonction des <a class=\"reference internal\" href=\"#csp-settings\"><span class=\"std std-ref\">réglages</span></a> configurés, sauf s’ils ont déjà été définis par une autre couche.</p>\n</section>\n<section id=\"settings\">\n<span id=\"csp-settings\"></span><h2>Réglages<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/fr/6.0/ref/middleware/#django.middleware.csp.ContentSecurityPolicyMiddleware\" title=\"django.middleware.csp.ContentSecurityPolicyMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">ContentSecurityPolicyMiddleware</code></a> est configuré en utilisant les réglages suivants:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-SECURE_CSP\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_CSP</code></a>: définit la politique de sécurité de contenu comme appliquée.</p></li>\n<li><p><a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-SECURE_CSP_REPORT_ONLY\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_CSP_REPORT_ONLY</code></a>: définit la politique de sécurité de contenu en mode signalement uniquement.</p></li>\n</ul>\n<aside class=\"admonition-these-settings-can-be-used-independently-or-together admonition\" role=\"note\">\n<p class=\"admonition-title\">Ces réglages peuvent être définis indépendamment ou conjointement.</p>\n<ul class=\"simple\">\n<li><p>Utilisez <a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-SECURE_CSP\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_CSP</code></a> seul pour appliquer une politique qui a déjà été testée et vérifiée.</p></li>\n<li><p>Utilisez <a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-SECURE_CSP_REPORT_ONLY\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_CSP_REPORT_ONLY</code></a> seul pour évaluer une nouvelle politique sans casser le comportement du site. Ce mode ne bloque pas les violations, il ne fait que les journaliser. C’est utile pour tester et surveiller, mais ne fournit aucune protection contre les menaces actives.</p></li>\n<li><p>Use <em>both</em> to maintain an enforced baseline while experimenting with\nchanges. Even for well-established policies, continuing to collect reports\ncan help detect regressions, unexpected changes in behavior, or\npotential tampering in production environments.</p></li>\n</ul>\n</aside>\n</section>\n<section id=\"policy-violation-reports\">\n<span id=\"csp-reports\"></span><h2>Rapports de violation de politique<a class=\"heading-anchor\" href=\"#policy-violation-reports\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Lorsqu’une violation CSP se produit, les navigateurs journalisent typiquement les détails dans la console de développement, fournissant un retour immédiat durant le développement. Pour recevoir aussi ces rapports de façon programmatique, la politique doit inclure une <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy#reporting_directives\">directive de signalement</a> telle que <code class=\"docutils literal notranslate\">report-uri</code> qui indique où les données de violation doivent être envoyées.</p>\n<p>Django prend en charge la configuration de ces directives via le réglage <a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-SECURE_CSP_REPORT_ONLY\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_CSP_REPORT_ONLY</code></a>, mais les signalements ne vont être déclenchés par le navigateur que si la politique inclut explicitement une directive de signalement valable.</p>\n<p>Django ne fournit pas de fonctionnalité intégrée pour recevoir, stocker ou traiter les rapports de violation. Pour les collecter et les analyser, vous devez implémenter vos propres points d’accès de signalement, ou intégrer un service de surveillance de tierce partie.</p>\n</section>\n<section id=\"csp-constants\">\n<span id=\"id1\"></span><h2>Constantes CSP<a class=\"heading-anchor\" href=\"#csp-constants\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django fournit des constantes prédéfinies représentant des mots-clés d’expressions sources CSP courants, tels que <code class=\"docutils literal notranslate\">'self'</code>, <code class=\"docutils literal notranslate\">'none'</code> et <code class=\"docutils literal notranslate\">'unsafe-inline'</code>. Ces constantes sont prévues pour être utilisées dans les valeurs de directives définies dans les réglages.</p>\n<p>Elles sont disponibles par l’énumération <a class=\"reference internal\" href=\"#django.utils.csp.CSP\" title=\"django.utils.csp.CSP\"><code class=\"xref py py-class docutils literal notranslate\">CSP</code></a>, et il est recommandé de les utiliser plutôt que les chaînes brutes. Cela aide à éviter les erreurs courantes telles que des fautes d’orthographe, des mises sous guillemets incorrectes ou de la mise en forme incohérente, et permet de garantir le respect de la spécification CSP.</p>\n<dl class=\"py class\" id=\"module-django.utils.csp\">\n<dt class=\"sig sig-object py\" id=\"django.utils.csp.CSP\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">CSP</span><a class=\"heading-anchor\" href=\"#django.utils.csp.CSP\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Énumération fournissant des constantes standardisées pour les expressions sources CSP courantes.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.csp.CSP.NONE\">\n<span class=\"sig-name descname\">NONE</span><a class=\"heading-anchor\" href=\"#django.utils.csp.CSP.NONE\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Représente <code class=\"docutils literal notranslate\">'none'</code>. Bloque le chargement de ressources pour la directive donnée.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.csp.CSP.REPORT_SAMPLE\">\n<span class=\"sig-name descname\">REPORT_SAMPLE</span><a class=\"heading-anchor\" href=\"#django.utils.csp.CSP.REPORT_SAMPLE\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Représente <code class=\"docutils literal notranslate\">'report-sample'</code>. Indique au navigateur d’inclure un extrait du code en faute dans les rapports. Sachez que cela pourrait exposer des données sensibles.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.csp.CSP.SELF\">\n<span class=\"sig-name descname\">SELF</span><a class=\"heading-anchor\" href=\"#django.utils.csp.CSP.SELF\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Représente <code class=\"docutils literal notranslate\">'self'</code>. Autorise à charger des ressources à partir de la même origine (même protocole, hôte et port).</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.csp.CSP.STRICT_DYNAMIC\">\n<span class=\"sig-name descname\">STRICT_DYNAMIC</span><a class=\"heading-anchor\" href=\"#django.utils.csp.CSP.STRICT_DYNAMIC\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Représente <code class=\"docutils literal notranslate\">'strict-dynamic'</code>. Autorise l’exécution de scripts chargés par un script de confiance (par ex. un script possédant un nonce ou une empreinte valide), sans avoir besoin de <code class=\"docutils literal notranslate\">'unsafe-inline'</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.csp.CSP.UNSAFE_EVAL\">\n<span class=\"sig-name descname\">UNSAFE_EVAL</span><a class=\"heading-anchor\" href=\"#django.utils.csp.CSP.UNSAFE_EVAL\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Représente <code class=\"docutils literal notranslate\">'unsafe-eval'</code>. Autorise l’utilisation d”<code class=\"docutils literal notranslate\">eval()</code> et des fonctions JavaScript similaires. Fortement découragé.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.csp.CSP.UNSAFE_HASHES\">\n<span class=\"sig-name descname\">UNSAFE_HASHES</span><a class=\"heading-anchor\" href=\"#django.utils.csp.CSP.UNSAFE_HASHES\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Représente <code class=\"docutils literal notranslate\">'unsafe-hashes'</code>. Autorise les gestionnaires d’événements et certains URI <code class=\"docutils literal notranslate\">javascript:</code> lorsque l’empreinte de leur contenu correspond à une règle de la politique. Nécessite le niveau 3+ de CSP.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.csp.CSP.UNSAFE_INLINE\">\n<span class=\"sig-name descname\">UNSAFE_INLINE</span><a class=\"heading-anchor\" href=\"#django.utils.csp.CSP.UNSAFE_INLINE\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Représente <code class=\"docutils literal notranslate\">'unsafe-inline'</code>. Autorise l’exécution de scripts, styles et URL <code class=\"docutils literal notranslate\">javascript:</code> intégrés dans les pages. Généralement déconseillé, particulièrement pour les scripts.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.csp.CSP.WASM_UNSAFE_EVAL\">\n<span class=\"sig-name descname\">WASM_UNSAFE_EVAL</span><a class=\"heading-anchor\" href=\"#django.utils.csp.CSP.WASM_UNSAFE_EVAL\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Représente <code class=\"docutils literal notranslate\">'wasm-unsafe-eval'</code>. Permet la compilation et l’exécution de code WebAssembly sans activer <code class=\"docutils literal notranslate\">'unsafe-eval'</code> pour les scripts.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.utils.csp.CSP.NONCE\">\n<span class=\"sig-name descname\">NONCE</span><a class=\"heading-anchor\" href=\"#django.utils.csp.CSP.NONCE\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La valeur de substitution spécifique à Django (<code class=\"docutils literal notranslate\">&quot;&lt;CSP_NONCE_SENTINEL&gt;&quot;</code>) utilisée dans les directives <code class=\"docutils literal notranslate\">script-src</code> ou <code class=\"docutils literal notranslate\">style-src</code> pour activer le CSP basé sur les nonces. Au moment de son exécution, l’intergiciel <a class=\"reference internal\" href=\"/fr/6.0/ref/middleware/#django.middleware.csp.ContentSecurityPolicyMiddleware\" title=\"django.middleware.csp.ContentSecurityPolicyMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">ContentSecurityPolicyMiddleware</code></a> remplace cette chaîne par un nonce sécurisé et aléatoire généré pour chaque requête. Voir les explications détaillées dans <a class=\"reference internal\" href=\"#csp-nonce\"><span class=\"std std-ref\">Nonce usage</span></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"module-django.views.decorators.csp\">\n<span id=\"decorators\"></span><h2>Décorateurs<a class=\"heading-anchor\" href=\"#module-django.views.decorators.csp\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django fournit des décorateurs pour contrôler les en-têtes CSP pour chaque vue. Cela permet de surcharger ou désactiver la politique d’application ou de signalement seul pour des vues particulières, fournissant un contrôle fin lorsque les réglages globaux ne suffisent pas. L’application de ces surcharges remplace complètement le CSP de base : il n’y a pas de fusion avec les règles existantes. Elles peuvent être utilisées conjointement avec les constantes définies dans <a class=\"reference internal\" href=\"#django.utils.csp.CSP\" title=\"django.utils.csp.CSP\"><code class=\"xref py py-class docutils literal notranslate\">CSP</code></a>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>L’affaiblissement ou la désactivation d’une politique CSP sur une page peut compromettre la sécurité de tout le site. En raison de la politique de « même origine », un attaquant pourrait exploiter une vulnérabilité sur une page pour accéder à d’autres pages du site.</p>\n</aside>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.csp.csp_override\">\n<span class=\"sig-name descname\">csp_override</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">config)(view</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.csp.csp_override\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Surcharge l’en-tête <code class=\"docutils literal notranslate\">Content-Security-Policy</code> pour la vue décorée en utilisant des directives au même format que le réglage <a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-SECURE_CSP\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_CSP</code></a>.</p>\n<p>L’argument <code class=\"docutils literal notranslate\">config</code> doit être une correspondance entre les directives CSP souhaitées. Si <code class=\"docutils literal notranslate\">config</code> est vide (<code class=\"docutils literal notranslate\">{}</code>), aucun en-tête CSP ne sera appliqué à la réponse renvoyée par cette vue, ce qui désactivera en pratique CSP pour cette vue.</p>\n<p>Exemples :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.csp</span> <span class=\"kn\">import</span> CSP\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.decorators.csp</span> <span class=\"kn\">import</span> csp_override\n\n\n<span class=\"nd\">@csp_override</span><span class=\"p\">(</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;default-src&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>CSP<span class=\"o\">.</span>SELF<span class=\"p\">],</span>\n        <span class=\"s2\">&quot;img-src&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>CSP<span class=\"o\">.</span>SELF<span class=\"p\">,</span> <span class=\"s2\">&quot;data:&quot;</span><span class=\"p\">],</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;Custom Content-Security-Policy header applied&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@csp_override</span><span class=\"p\">({})</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_other_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;No Content-Security-Policy header added&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.csp.csp_report_only_override\">\n<span class=\"sig-name descname\">csp_report_only_override</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">config)(view</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.csp.csp_report_only_override\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Overrides the <code class=\"docutils literal notranslate\">Content-Security-Policy-Report-Only</code> header for the\ndecorated view using directives in the same format as the\n<a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-SECURE_CSP_REPORT_ONLY\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_CSP_REPORT_ONLY</code></a> setting.</p>\n<p>Like <a class=\"reference internal\" href=\"#django.views.decorators.csp.csp_override\" title=\"django.views.decorators.csp.csp_override\"><code class=\"xref py py-func docutils literal notranslate\">csp_override()</code></a>, the <code class=\"docutils literal notranslate\">config</code> argument must be a mapping with\nthe desired CSP directives. If <code class=\"docutils literal notranslate\">config</code> is an empty mapping (<code class=\"docutils literal notranslate\">{}</code>), no\nCSP report-only header will be added to the response returned by that view,\neffectively disabling report-only CSP for that view.</p>\n<p>Exemples :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.csp</span> <span class=\"kn\">import</span> CSP\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.decorators.csp</span> <span class=\"kn\">import</span> csp_report_only_override\n\n\n<span class=\"nd\">@csp_report_only_override</span><span class=\"p\">(</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;default-src&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>CSP<span class=\"o\">.</span>SELF<span class=\"p\">],</span>\n        <span class=\"s2\">&quot;img-src&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>CSP<span class=\"o\">.</span>SELF<span class=\"p\">,</span> <span class=\"s2\">&quot;data:&quot;</span><span class=\"p\">],</span>\n        <span class=\"s2\">&quot;report-uri&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;https://mysite.com/csp-report/&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;Custom Content-Security-Policy-Report-Only header applied&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@csp_report_only_override</span><span class=\"p\">({})</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_other_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;No Content-Security-Policy-Report-Only header added&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<p>The examples above assume function-based views. For class-based views, see the\n<a class=\"reference internal\" href=\"/fr/6.0/topics/class-based-views/intro/#id1\"><span class=\"std std-ref\">guide for decorating class-based views</span></a>.</p>\n</section>\n<section id=\"nonce-usage\">\n<span id=\"csp-nonce\"></span><h2>Nonce usage<a class=\"heading-anchor\" href=\"#nonce-usage\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>A CSP nonce (« number used once ») is a unique, random value generated per HTTP\nresponse. Django supports nonces as a secure way to allow specific inline\n<code class=\"docutils literal notranslate\">&lt;script&gt;</code> or <code class=\"docutils literal notranslate\">&lt;style&gt;</code> elements to execute without relying on\n<code class=\"docutils literal notranslate\">'unsafe-inline'</code>.</p>\n<p>Nonces are enabled by including the special placeholder\n<a class=\"reference internal\" href=\"#django.utils.csp.CSP.NONCE\" title=\"django.utils.csp.CSP.NONCE\"><code class=\"xref py py-attr docutils literal notranslate\">NONCE</code></a> in the relevant directive(s) of your\n<a class=\"reference internal\" href=\"#csp-settings\"><span class=\"std std-ref\">CSP settings</span></a>, such as <code class=\"docutils literal notranslate\">script-src</code> or <code class=\"docutils literal notranslate\">style-src</code>.\nWhen present, the\n<a class=\"reference internal\" href=\"/fr/6.0/ref/middleware/#django.middleware.csp.ContentSecurityPolicyMiddleware\" title=\"django.middleware.csp.ContentSecurityPolicyMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">ContentSecurityPolicyMiddleware</code></a>\nwill generate a nonce and insert the corresponding <code class=\"docutils literal notranslate\">nonce-&lt;value&gt;</code> source\nexpression into the CSP header.</p>\n<p>To use this nonce in templates, the\n<a class=\"reference internal\" href=\"/fr/6.0/ref/templates/api/#django.template.context_processors.csp\" title=\"django.template.context_processors.csp\"><code class=\"xref py py-func docutils literal notranslate\">csp()</code></a> context processor needs to be\nenabled. It adds a <code class=\"docutils literal notranslate\">csp_nonce</code> variable to the template context, allowing\ninline elements to include a matching <code class=\"docutils literal notranslate\">nonce=&quot;{{ csp_nonce }}&quot;</code> attribute in\ninline scripts or styles.</p>\n<p>The browser will only execute inline elements that include a <code class=\"docutils literal notranslate\">nonce=&lt;value&gt;</code>\nattribute matching the one specified in the <code class=\"docutils literal notranslate\">Content-Security-Policy</code> (or\n<code class=\"docutils literal notranslate\">Content-Security-Policy-Report-Only</code>) header. This mechanism provides\nfine-grained control over which inline code is allowed to run.</p>\n<p>If a template includes <code class=\"docutils literal notranslate\">{{ csp_nonce }}</code> but the policy does not include\n<a class=\"reference internal\" href=\"#django.utils.csp.CSP.NONCE\" title=\"django.utils.csp.CSP.NONCE\"><code class=\"xref py py-attr docutils literal notranslate\">NONCE</code></a>, the HTML will include a nonce attribute,\nbut the header will lack the required source expression. In this case, the\nbrowser will block the inline script or style (or report it for report-only\nconfigurations).</p>\n<section id=\"nonce-generation-and-caching\">\n<h3>Nonce generation and caching<a class=\"heading-anchor\" href=\"#nonce-generation-and-caching\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django’s nonce generation is <strong>lazy</strong>: the middleware only generates a nonce if\n<code class=\"docutils literal notranslate\">{{ csp_nonce }}</code> is accessed during template rendering. This avoids\nunnecessary work for pages that do not use nonces.</p>\n<p>However, because nonces must be unique per request, extra care is needed when\nusing full-page caching (e.g., Django’s cache middleware, CDN caching). Serving\ncached responses with previously generated nonces may result in reuse across\nusers and requests. Although such responses may still appear to work (since the\nnonce in the CSP header and HTML content match), reuse defeats the purpose of\nthe nonce and weakens security.</p>\n<p>To ensure nonce-based policies remain effective:</p>\n<ul class=\"simple\">\n<li><p>Avoid caching full responses that include <code class=\"docutils literal notranslate\">{{ csp_nonce }}</code>.</p></li>\n<li><p>If caching is necessary, use a strategy that injects a fresh nonce on each\nrequest, or consider refactoring your application to avoid inline scripts and\nstyles altogether.</p></li>\n</ul>\n</section>\n</section>","rootId":"content-security-policy","toc":[{"title":"Aperçu","anchor":"overview","children":[]},{"title":"Réglages","anchor":"settings","children":[]},{"title":"Rapports de violation de politique","anchor":"policy-violation-reports","children":[]},{"title":"Constantes CSP","anchor":"csp-constants","children":[]},{"title":"Décorateurs","anchor":"module-django.views.decorators.csp","children":[]},{"title":"Nonce usage","anchor":"nonce-usage","children":[{"title":"Nonce generation and caching","anchor":"nonce-generation-and-caching","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/6.0/ref/"}],"prev":{"docname":"ref/contrib/syndication","title":"L’infrastructure de syndication par flux","url":"/fr/6.0/ref/contrib/syndication/"},"next":{"docname":"ref/csrf","title":"Protection contre le « Cross site request forgery » (CSRF)","url":"/fr/6.0/ref/csrf/"},"formats":{"html":"/fr/6.0/ref/csp/","markdown":"/fr/6.0/ref/csp.md","json":"/fr/6.0/ref/csp.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/csp.txt","official":"https://docs.djangoproject.com/fr/6.0/ref/csp/","inVersions":["6.1","6.0"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}