ser un principiante en las cookies, CSRF y Django (usando 1.4), por lo que he podido averiguar es así como funciona, por favor me corrija dónde vaya mal ...¿Es así como funciona la protección CSRF de Django?
Lo siguiente se aplica cuando django.middleware. csrf.CsrfViewMiddleware se incluye en la tupla MIDDLEWARE_CLASSES.
Cuando un formulario POST incluye la etiqueta csrf_token
, y la vista correspondiente pasa RequestContext
a la plantilla, solicitar que la página signifique que Django incluye un campo de formulario oculto que contiene una cadena alfanumérica. Django también devuelve al navegador una cookie con el nombre establecido en csrftoken
y el valor establecido en la misma cadena alfanumérica.
Al recibir el envío del formulario, Django comprueba que el valor de la cadena alfanumérica del campo de formulario oculto coincide y la cookie csrftoken recibida del navegador. Si no coinciden, se emite una respuesta 403.
Un ataque CSRF puede venir en la forma de un sitio web malicioso que incluye un iframe. El iframe incluye un formulario POST y algo de JavaScript. El atributo action
del formulario apunta a mi sitio Django. El formulario está diseñado para hacer algo desagradable en mi sitio, y JS envía el formulario cuando se carga el iframe.
El navegador incluiría la cookie csrftoken
en el encabezado del envío del formulario. Sin embargo, el formulario no incluiría el campo oculto con la cadena alfanumérica correspondiente, por lo que se devuelve un 403 y el ataque falla. Si el iframe JS intentó acceder a la cookie, para crear el campo de formulario hiddden correcto, el navegador evitaría que lo haga.
¿Es esto correcto?
No veo nada malo. Tal vez otros lo harán, pero en general, lo tienes. – Zashas