Error CSRF - causas y cómo corregirlo de forma segura

10 de noviembre de 2026

Diagrama explica cómo un atacante crea una solicitud maliciosa, la envía a un usuario y, al hacer clic, se produce un **error CSRF**, permitiendo el acceso no autorizado.

Índice

Cuando una aplicación rechaza una acción con un error CSRF, normalmente no significa que la cuenta esté bloqueada ni que el servidor se haya caído. Suele indicar que la petición no incluye una prueba válida de que procede de la sesión legítima, algo esencial para evitar cambios de contraseña, transferencias o envíos de formularios manipulados. Aquí explico qué lo provoca, cómo diagnosticarlo y qué medidas funcionan de verdad desde la perspectiva del desarrollo seguro y el hacking ético.

La protección CSRF valida que cada acción sensible sea legítima

  • Causa habitual: falta el token, ha caducado o no coincide con la sesión.
  • Primer paso: revisar la petición fallida en las herramientas de desarrollo del navegador.
  • Defensa principal: usar tokens CSRF sincronizados o un patrón de cookie firmado y validado.
  • Refuerzo útil: configurar SameSite y validar los encabezados Origin o Referer cuando proceda.
  • Error frecuente: confiar solo en CORS, CAPTCHA o cookies HttpOnly.

Diagrama muestra cómo un atacante crea una solicitud, la incrusta en un enlace y engaña a un usuario para que haga clic, resultando en un error CSRF y acceso no autorizado.

Qué significa un error CSRF y por qué aparece

CSRF significa Cross-Site Request Forgery, o falsificación de peticiones entre sitios. El ataque intenta aprovechar que el navegador envía automáticamente la cookie de sesión cuando una persona autenticada visita otra página. El servidor recibe la petición con credenciales válidas, aunque el usuario no haya querido realizar esa acción.

La aplicación evita este escenario mediante un token CSRF, una cadena impredecible vinculada a la sesión o a la petición. Si el servidor espera ese valor y no lo encuentra, recibe uno antiguo o detecta que no coincide, bloquea la operación y muestra el error.

Un ejemplo sencillo

Imaginemos una tienda online con una sesión activa. Mientras el usuario navega por otra web, esa página intenta enviar una petición para cambiar la dirección de entrega. La cookie puede viajar automáticamente, pero la página maliciosa no debería conocer el token secreto del formulario. Si la tienda lo valida correctamente, la operación se detiene.

CSRF no es lo mismo que XSS. En un ataque XSS se inyecta código que se ejecuta dentro del sitio legítimo; en CSRF se intenta hacer que el navegador envíe una petición no deseada. Esta diferencia importa porque un token CSRF no corrige una vulnerabilidad XSS, y una aplicación puede necesitar ambas defensas.

Las causas más habituales del fallo

En mis revisiones de aplicaciones, el problema rara vez está en el concepto de CSRF. Lo más común es una integración incompleta entre frontend, backend, cookies y proxy. La siguiente tabla ayuda a localizar el origen sin empezar a cambiar configuraciones al azar.

Causa Qué suele verse Corrección habitual
Token ausente La petición POST, PUT, PATCH o DELETE no contiene el valor exigido. Incluirlo en un campo oculto o en un encabezado específico.
Token caducado El formulario permaneció abierto demasiado tiempo. Regenerar el formulario y gestionar sesiones expiradas de forma clara.
Token desincronizado El frontend conserva un valor distinto al que espera el servidor. Revisar caché, renovación de sesión y llamadas asíncronas.
Cookie no enviada La sesión desaparece o el servidor cree que el usuario no está autenticado. Comprobar dominio, ruta, HTTPS, credenciales y atributo SameSite.
Petición AJAX incompleta Los formularios funcionan, pero la interfaz JavaScript falla. Enviar el token también en las peticiones fetch o XMLHttpRequest.
Proxy o caché mal configurado Algunos usuarios reciben tokens repetidos o páginas antiguas. Excluir formularios personalizados de cachés compartidas.

También puede aparecer después de cambiar de HTTP a HTTPS, modificar el dominio, activar un CDN o separar la API del frontend. En esos casos, el fallo no siempre está en el token, sino en la relación entre origen, cookies y credenciales.

Cómo diagnosticarlo sin perder tiempo

Para una persona usuaria, lo primero es recargar la página, cerrar la sesión y volver a entrar. Si el aviso continúa, conviene borrar las cookies del sitio o probar una ventana privada. Esto puede resolver un token obsoleto, pero no arregla un defecto de configuración del servidor.

Para quien administra o desarrolla la aplicación, la forma más rápida consiste en inspeccionar la petición fallida en las herramientas del navegador. Hay que comparar una petición que funciona con otra que produce el error y revisar estos elementos:

  1. Método HTTP. Las operaciones que cambian datos no deberían aceptar peticiones sin protección.
  2. Cookie de sesión. Hay que confirmar que se envía al dominio, ruta y protocolo correctos.
  3. Token. Debe aparecer en el campo del formulario o en el encabezado previsto, con el nombre exacto.
  4. Origen de la petición. Origin y Referer pueden revelar una llamada que llega desde un contexto inesperado.
  5. Respuesta del servidor. El código HTTP y los registros suelen indicar si falla la ausencia, la caducidad o la validación del token.

No recomiendo desactivar temporalmente la validación para “confirmar” el diagnóstico en producción. Es más seguro reproducir el caso en un entorno de pruebas y registrar únicamente datos técnicos, nunca tokens, cookies o credenciales reales.

Qué comprobar en una SPA

En una aplicación de una sola página, el HTML inicial puede cargar correctamente y fallar solo al guardar cambios. El motivo suele ser que el código JavaScript envía la sesión, pero olvida añadir el token al encabezado o no usa la opción de credenciales adecuada. La prueba debe cubrir login, carga del token, renovación de sesión y cada método que modifica datos.

Cómo corregir la protección según la arquitectura

En formularios tradicionales, el patrón más sencillo es generar un token en el servidor, insertarlo en el formulario y validarlo al recibir la petición. El valor debe ser impredecible, estar ligado a la sesión y no reutilizarse como contraseña ni como identificador visible del usuario.

En una API consumida por JavaScript, el token puede viajar en un encabezado como X-CSRF-Token. La implementación concreta depende del framework, pero la regla es la misma: el servidor debe validar el token antes de ejecutar la acción, no después de guardar los cambios.

Otra alternativa es el patrón de doble cookie. El servidor envía una cookie con el token y el cliente copia ese valor en un encabezado. El backend compara ambos elementos. Si se utiliza esta técnica, la cookie debe estar protegida contra modificaciones y la aplicación debe entender que leer una cookie desde JavaScript no equivale a validarla.

Cookies SameSite como capa adicional

El atributo SameSite limita cuándo el navegador envía cookies en peticiones iniciadas desde otro sitio. Lax suele ofrecer un equilibrio razonable para muchas aplicaciones, mientras que Strict aplica una política más rígida y puede afectar ciertos flujos de navegación o integraciones externas.

SameSite ayuda, pero no debe convertirse en la única defensa. Hay escenarios con subdominios, aplicaciones móviles, navegadores antiguos o integraciones legítimas entre dominios donde la política no cubre todo el riesgo. OWASP recomienda combinar el token con controles adicionales en las operaciones sensibles.

Lee también: Ataque Homográfico - ¿Cómo detectar y prevenir el engaño?

Validación del origen

Comprobar los encabezados Origin o Referer puede reforzar la protección, sobre todo en APIs y paneles administrativos. No conviene tratar un Referer ausente como prueba automática de ataque, porque algunos navegadores, extensiones y políticas de privacidad lo eliminan. La aplicación debe definir una estrategia clara para esos casos.

Qué soluciones no bastan por sí solas

Uno de los errores más repetidos consiste en pensar que una sola cabecera de seguridad resuelve CSRF. CORS no impide todas las peticiones no deseadas; controla qué respuestas puede leer un origen, pero no sustituye la validación de una intención legítima en el servidor.

Medida Qué aporta Por qué no es suficiente sola
Token CSRF Demuestra que la petición incluye un valor esperado por la aplicación. Debe estar bien integrado y protegido frente a XSS.
SameSite Reduce el envío de cookies en determinados contextos cross-site. Puede no cubrir todos los flujos ni todas las arquitecturas.
HttpOnly Dificulta que JavaScript lea la cookie de sesión. No evita que el navegador envíe automáticamente esa cookie.
CORS Controla el acceso de scripts de otros orígenes a las respuestas. No reemplaza un mecanismo anti-CSRF.
CAPTCHA Reduce ciertos abusos automatizados. No valida el origen legítimo de cada petición.

Tampoco conviene aceptar acciones que cambian datos mediante GET. Una petición de lectura puede activarse con más facilidad desde una imagen, un enlace o una redirección. Usar POST, PUT, PATCH o DELETE para modificar información no elimina CSRF, pero reduce superficies de ataque innecesarias.

Cómo revisar el problema desde el hacking ético

Una auditoría autorizada debe empezar por identificar qué acciones tienen impacto real. Cambiar el correo, modificar permisos, crear usuarios, eliminar registros o iniciar operaciones financieras merecen una revisión prioritaria. La prueba debe realizarse con cuentas de laboratorio y sin enviar peticiones contra sistemas ajenos.

El objetivo no es demostrar que una petición puede enviarse, sino comprobar si el servidor la acepta sin un token válido y sin un origen permitido. También hay que probar tokens ausentes, modificados, reutilizados, asociados a otra sesión y enviados después de cerrar sesión.

  • Confirmar que las operaciones de solo lectura no se confunden con acciones de cambio.
  • Verificar que cada formulario sensible genera y valida su propio mecanismo de protección.
  • Comprobar que las respuestas de error no revelan tokens ni información de sesión.
  • Revisar que la protección funciona igual en navegador, aplicación móvil y API.
  • Registrar la corrección y repetir las pruebas después de cada cambio de autenticación o dominio.

En una revisión profesional, el error CSRF es una señal útil: demuestra que la aplicación está rechazando una petición, pero no garantiza que todas las rutas estén protegidas. La cobertura real se obtiene revisando el mapa completo de acciones y no solo el formulario donde apareció el aviso.

La señal que conviene conservar después de corregirlo

Una solución sólida combina tokens validados en el servidor, cookies configuradas con criterio, controles de origen y pruebas sobre todas las operaciones que modifican datos. Si el fallo solo desaparece al borrar cookies o desactivar una comprobación, el problema sigue presente.

Mi recomendación es conservar una prueba automatizada que intente ejecutar cada acción sensible sin token, con un token alterado y con una sesión diferente. Así, una futura actualización del frontend, del framework o del proxy no convierte una protección aparentemente correcta en una puerta abierta.

Preguntas frecuentes

Significa que la aplicación no ha recibido una prueba válida de que la petición procede de la sesión legítima. El token puede faltar, haber caducado o no coincidir con la sesión activa.

Compara una petición correcta con la fallida y revisa el método HTTP, la cookie de sesión, el token y los encabezados Origin o Referer. En una SPA, confirma también que fetch o XMLHttpRequest envía las credenciales y el token en el encabezado previsto.

En formularios tradicionales, genera el token en el servidor, inclúyelo en el formulario y valídalo antes de ejecutar la acción. En APIs usadas por JavaScript, puede enviarse mediante un encabezado como X-CSRF-Token; otra opción es el patrón de doble cookie, comparando la cookie con el valor recibido en el encabezado.

No. SameSite reduce el envío de cookies en ciertos contextos, CORS controla el acceso a respuestas, HttpOnly dificulta leer cookies desde JavaScript y CAPTCHA reduce algunos abusos automatizados, pero ninguna de estas medidas sustituye la validación de un token CSRF en el servidor.

Calificar artículo

Calificación: 0.00 Número de votos: 0

Etiquetas:

csrf samesite cors cookies tokens

Compartir artículo

Joel Razo

Joel Razo

Nací como Joel Razo y tengo 14 años de experiencia en el fascinante mundo de la ciberseguridad, la privacidad y el hacking ético. Desde que descubrí la importancia de proteger la información personal y la integridad de los sistemas, me he dedicado a profundizar en estos temas, buscando siempre maneras de hacer que la tecnología sea más segura y accesible para todos. Me apasiona desmitificar conceptos complejos y ayudar a los lectores a comprender los riesgos y las mejores prácticas en un entorno digital en constante cambio. A lo largo de mi carrera, he trabajado en diversos aspectos de la ciberseguridad, desde la evaluación de vulnerabilidades hasta la implementación de soluciones de seguridad. Me gusta investigar y verificar fuentes, comparar información y seguir las tendencias más recientes para ofrecer contenido útil, preciso y fácil de entender. Mi compromiso es brindar a los lectores información actualizada que les permita navegar por el mundo digital con confianza y seguridad.

Escribe un comentario