2011-10-12 15 views
21

Me he dado cuenta de que si publica con un token CSRF no válido, Rails/devise lo cierra automáticamente.Rails CSRF Token's: ¿caducan?

Tengo una aplicación que no actualiza la página, y los usuarios se sientan en la página en tiempo real durante mucho tiempo. De vez en cuando, el usuario es expulsado. Me pregunto si el token CSRF está por vencer, por lo que es inválido.

Por eso estoy tratando de aprender, ¿expiran los tokens CSRF de Rails? ¿Hay algún momento en algún lugar?

Gracias

+0

¿Puede describir lo que el usuario está haciendo después de estar inactivo por un tiempo (HTTP POST de una actualización de estado, OBTENCIÓN de datos nuevos, etc.) – Nick

Respuesta

24

protección CSRF en Rails funciona mediante el almacenamiento de un valor aleatorio como un campo en el formulario se presenta, y también en la sesión del usuario. Si los valores no coinciden cuando se envía un formulario, Rails rechaza la solicitud de envío del formulario.

Si está utilizando el almacén de sesión de cookies predeterminado en Rails, las sesiones no caducarán (hasta que la cookie lo haga). Si está utilizando algo más (archivo o sesiones respaldadas por DB), entonces sí, si esas sesiones caducan, el envío del formulario fallará con un error CSRF.

Así que si está utilizando sesiones basadas en cookies (por defecto), verifique el vencimiento de la cookie. Si se ve bien, es probable que sea otro problema.

+0

No mencionó el tiempo de caducidad de la cookie csrf. ¿Es una cookie de sesión? – Ethan

+0

Se almacena en la sesión, sí. Solo está en la cookie de sesión si no está utilizando una sesión respaldada por ActiveRecord. – Lambart

+0

Esta respuesta realmente me ayudó a comprender algunos conceptos y resolver un error que encontramos. ¡Gracias! De todos modos, me gustaría entender por qué se necesita la cookie. Si los rieles te dan un authenticiy_token y envías el formulario con el mismo token, ¿por qué se necesita la cookie? Intenté enviar un formulario después de borrar el caché y obtuve 'ActionController :: InvalidAuthenticityToken'. ¿El token del formulario se almacena en la sesión y cuando se envía el formulario, envía tanto la cookie como el formulario y valida ambos tokens? Gracias. –

Cuestiones relacionadas