La seguridad de la tienda
Una tienda pública es otra cosa que un portal de clientes. En el portal solo entran clientes tuyos; aquí entra internet entero, y buena parte de lo que llama a la puerta no es un cliente.
Esto es lo que hay puesto. No hace falta que configures nada: viene activo.
Contra el robo de sesión
Testigo anti-CSRF en todo lo que cambia algo. Cada formulario lleva un testigo único del visitante. Un formulario montado en otra web que apunte a tu tienda no lo tiene, y se rechaza.
Se comprueba de dónde viene la petición. Si un envío llega desde otro sitio, no se atiende, lleve la cookie que lleve el navegador.
Las cookies de sesión son HttpOnly, Secure y SameSite=Lax. No se pueden leer desde JavaScript, no viajan sin HTTPS y no se mandan cuando la petición viene de fuera.
La sesión se comprueba entera. No basta con el número del cliente en la cookie: tiene que cuadrar además la llave de sesión que se guardó al entrar. Cambiar el número a mano no sirve de nada.
Contra el probar contraseñas
Ocho intentos y quince minutos de espera. Se cuentan por IP y por IP más correo a la vez: así ni se pueden probar mil contraseñas de una cuenta, ni recorrer mil cuentas desde una misma IP.
Se le dice cuántos le quedan. «Te quedan 5 intentos». Un cliente despistado no se asusta y sabe a qué atenerse.
Aviso por correo al agotarlos, con la IP, el correo que se estaba probando y la hora. Uno solo por IP y ventana: si están probando en bucle, no hace falta un correo por intento. El destinatario se configura en el módulo; vacío, el de la empresa.
El mismo mensaje falle el correo o la contraseña. Si cambiara según si la dirección existe, la propia pantalla iría diciendo qué clientes tienes dados de alta.
Lo mismo vale para recuperar la contraseña: se conteste lo que se conteste, el mensaje es «si ese correo tiene cuenta, le hemos mandado una contraseña nueva».
Contra la manipulación de precios
Ningún importe se calcula con lo que manda el navegador. El precio se relee del catálogo y los totales los calcula el motor de GestioERP, el mismo que usa cualquier factura. Quien manipule el HTML no cambia el importe.
Una línea de la cesta solo se toca si es de la cesta de quien lo pide. Sin esto, cambiando un número en la dirección se podría vaciar la cesta de otro.
Cabeceras del navegador
| Cabecera | Qué impide |
|---|---|
X-Content-Type-Options: nosniff | Que un fichero se ejecute como algo que no es |
X-Frame-Options: SAMEORIGIN | Que metan tu tienda en un marco dentro de otra web |
Referrer-Policy | Que se filtre a dónde iba el cliente |
Cache-Control: no-store | Que la cesta o la cuenta se queden guardadas |
El escaparate sí se deja cachear —es igual para todos y así vuela—; la cesta y la cuenta, nunca.
Los datos del cliente
Se guarda lo necesario para preparar el pedido y emitir la factura, y nada más. La tienda no guarda números de tarjeta: el pago se hace en la pasarela, y de vuelta solo llega si salió bien o no.
Lo que sigue en tu mano
- Ten la tienda en HTTPS. Sin eso, lo demás importa menos.
- Pon un correo de avisos que alguien lea.
- Revisa de vez en cuando los clientes de la web: si aparecen altas raras en bloque, algo está pasando.