Symfony2: varnish cache y CSRF token

Si nuestro proyecto en symfony, symfony2 o silex lo alojamos en un servidor que utilice el cache varnish, podemos encontrarnos con problemas al enviar un formulario.

Índice
  1. ¿Que es "CSRF token is invalid"?
  2. Un ejemplo real

¿Que es "CSRF token is invalid"?

La función de varnish es cachear las páginas para servirlas más rápidamente y ganar en velocidad nuestra web.

El problema es que puede llegar a cachear nuestra página con el formulario, incluyendo el token CSRF, produciendo un error. Este token CSRF se genera cada vez que se carga la pagina por seguridad, pero al mostrar Varnish el contenido cacheado, el token CSRF será siempre el mismo.

Un ejemplo real

Por ejemplo, supongamos que tenemos nuestro formulario de contacto en la url /contacto , y siempre nos muestra el error del token csrf. Para evitar esto, tan solo debemos modificar nuestra configuración de varnish, editando el fichero /etc/varnish/default.vcl

Primero debemos evitar que varnish cachee el contenido de la página /contacto:

sub vcl_recv {
    ...
    if ( req.url ~ "^/contacto" ) 
    {
        return (pass);
    }
    ...
}    

Y luego debemos indicar que no filtre cookies en esa misma página:

sub vcl_fetch {
    ...
    if( beresp.http.Set-Cookie && req.url !~ "^contacto")){
        unset beresp.http.Set-Cookie;
    }
    ...
}

Y evidentemente debemos reiniciar el servicio de varnish para que los cambios sean efectivos:

/etc/init.d/varnish restart
¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir