Tengo tokens CSRF en todas partes en mi sitio de comercio electrónico que usan formularios POST. Sin embargo, no quiero iniciar una sesión (con una cookie) a menos que sea absolutamente necesario (principalmente porque estoy usando caché de barniz, y no quiero acceder al servidor de backend a menos que sea absolutamente necesario, incluso con ESI). / p>
Eso significa que si el usuario solo está navegando por el catálogo, entonces no se crea ninguna sesión. (Si visitan las páginas de inicio de sesión o de registro, se crea una sesión para crear un token CSRF para el formulario de inicio de sesión / registro, pero eso no es un problema, ya que están a punto de iniciar sesión).
El formulario POST para "agregar a la cesta" en la página del producto me está causando algunos problemas.
Quiero proteger "agregar a la cesta" con tokens CSRF (por ejemplo, un atacante podría usar CSRF para agregar otros productos a su cesta). Pero no quiero agregar un token de CSRF a cada página de producto, ya que eso iniciaría una sesión, lo que significa que cada vista de producto debería golpear el backend para obtener el token.
Entonces, lo que he hecho es que cuando un usuario sin sesión agrega un producto, entonces no se necesita CSRF. Luego, cuando se agrega el producto, se crea una sesión (para que se pueda usar la cesta), y todas las vistas subsiguientes de la página del producto tienen formularios que usan CSRF.
¿Es esta mala práctica? Por lo que puedo ver, cualquier "ataque csrf" en el complemento del producto no puede hacer ningún daño.
(Sé que es poco probable que alguien se moleste en realizar un ataque CSRF en una página de complemento a la canasta ... e incluso si lo hicieran, probablemente no sea un gran problema de todos modos. cosas "correctas").
(La comprobación de los encabezados de origen / referencia también es algo a tener en cuenta).
Muchas gracias :)