Pour se défendre des attaques CSRF, Django contient les outils indispensables. Cet article donne la recette pour gérer soi-même le rendu de la page d'erreur liée à ce type d'attaque.
Voici la courte méthode permettant de gérer la page d'erreur CSRF soi-même. Cette méthode vous permet d'afficher la page d'erreur avec votre propre design / template.
Dans le fichier settings.py
ajouter :
CSRF_FAILURE_VIEW = "<votre_projet>.csrf.csrf_failure"
Créer à la racine le fichier csrf.py
contenant le code suivant :
# -*- coding: utf-8 -*- from django.views.generic.simple import direct_to_template def csrf_failure(request, reason=""): """ Default view used when request fails CSRF protection """ response = direct_to_template(request, 'csrf.html') response.status_code = 403 return response
Enfin n'oubliez pas de créer le template csrf.html
dans le dossier templates/
PS: On prend soin de renvoyer le code d'erreur HTTP 403, car par défaut c'est le code 200, ce qui peut laisser penser que tout va bien. Voir la liste des codes HTTP disponibles