From 53f76cd261ae4b5e42397614a6ee003bf2138671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Am=C3=A9lie=20=22Lymkwi=22=20Gonz=C3=A1lez?= Date: Mon, 9 Oct 2023 16:08:40 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=99=20Add=20CSRF=20variables=20to=20do?= =?UTF-8?q?cumentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/02-structure/projet/configuration.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/manuel/src/02-structure/projet/configuration.md b/docs/manuel/src/02-structure/projet/configuration.md index 954fe540..64204fb0 100644 --- a/docs/manuel/src/02-structure/projet/configuration.md +++ b/docs/manuel/src/02-structure/projet/configuration.md @@ -22,7 +22,7 @@ aléatoire unique et connue seulement de la personne qui déploie le site en production. Elle est mise dans `DJANGO_KEY`, et piochée dans la variable d'environnement `DJANGO_SECRET`. -## Allowed Hosts, URLs et CORS +## Allowed Hosts, URLs, CSRF et CORS Le web est un système compliqué qui repose sur l'intercommunication de plein d'acteur⋅ices différent⋅es. Cependant, autoriser des communications de partout @@ -46,6 +46,21 @@ au frontend de nous passer des informations d'authentification Enfin, on indique à Django quel module contient la liste des URLs de l'API dans `ROOT_URLCONF`. +Ensuite viennent les CSRF, qui permettent d'éviter les attaques de *Cross-Site +Request Forgery*. C'est un mécanisme via lequel le navigateur va obtenir un +cookie via une requête à un point d'API, puis l'utiliser dans un appel pour +prouver sa bonne foi. + +On peut contrôler quels noms de domaines sont autorisés à effectuer ces requêtes +de CSRF, et nous avons notamment besoin que le frontend y soit autorisé. On a du +coup: +```python +CSRF_TRUSTED_ORIGINS = [ + "https://api." + getenv("WEBSITE_HOST", "localhost"), + "https://" + getenv("WEBSITE_HOST", "localhost"), +] +``` + ## Applications & Middlewares Django est un framework explosé en de nombreux petits morceaux. On les réunit