CSRF validation avec Django 1.2
Ayant eu besoin de réaliser un site web avec Django (super framework python) il y a peu, j'ai eu quelques ennuis avec la validation CSRF.
CSRF pour Cross Site Request Forgery est une protection (si j'ai bien compris) pour vérifier que la réponse d'un formulaire vient bien de votre site. Un token inséré dans une balise cachée est envoyé au serveur avec toutes les infos pour être comparé lors de la validation du formulaire.
Cette protection était facultative dans les précédentes versions de Django mais automatique dans la 1.2.
Lorsque vous créez votre fonction habituelle il se peut que vous retrouviez avec le joli message d'erreur "CSRF Missing Token".
Plusieurs méthodes semblent résoudre ce problème (cf la doc ou stackoverflow par exemple).
Pour moi personnellement, il a fallut importer un module et modifier le settings.py
[cc lang="python"]# settings.py
...
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
# views.py
...
from django.template import RequestContext
...
[/cc]
Et normalement dans votre code de votre page html générée, vous pouvez voir quelque chose comme :
[cc lang="HTML"]
[/cc]