Django viene con CSRF protection middleware, que genera un token único por sesión para usar en formularios. Escanea todas las solicitudes POST
entrantes para el token correcto y rechaza la solicitud si el token falta o no es válido.¿Es seguro exponer el token de protección CSRF de una sesión?
Me gustaría usar AJAX para algunas solicitudes POST, pero dichas solicitudes no tienen el token CSRF disponible. Las páginas no tienen elementos <form>
para enganchar y prefiero no ensuciar el marcado insertando el token como un valor oculto. Me parece que una buena forma de hacerlo es mostrar una fuente como /get-csrf-token/
para devolver el token del usuario, confiando en las reglas de scripts entre sitios del navegador para evitar que los sitios hostiles lo soliciten.
¿Es esta una buena idea? ¿Hay mejores formas de protegerse contra los ataques de CSRF al mismo tiempo que se permiten las solicitudes de AJAX?
Los tokens CSRF deben cambiar con cada operación. ¿Sugiere que cada operación actualice el token? ¿Eso no significa que las operaciones del usuario tendrán que ser sincrónicas (el segundo no puede comenzar hasta que el primero haya regresado y se haya dado el nuevo token csrf)? – Mystic
Esta no es la mejor respuesta. Como dice Carl Meyer en su respuesta: no es necesario proteger las solicitudes AJAX de CSRF mediante el uso de un token * en Django *, ya que Django ya protege las solicitudes AJAX de una manera diferente. Esto también elimina la preocupación de Mystics. – hopla
tal vez esto ayude, incluso si no ordené esta historia sobre ajax y CSRF http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax – amirouche