Protección contra CSRF
Genere y valide tokens CSRF en formularios para evitar solicitudes falsificadas.
Protección contra CSRF es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué es CSRF?
La falsificación de solicitudes entre sitios (CSRF) engaña a usuarios autenticados para que realicen acciones no deseadas. Una página maliciosa envía una solicitud falsificada a su sitio utilizando la sesión activa de la víctima.
Cómo funciona CSRF
Escenario: Alice ha iniciado sesión en bank.com. Visita malicious.com, que contiene un formulario oculto que envía automáticamente una solicitud de transferencia a bank.com utilizando su cookie de sesión.
Tokens CSRF
La defensa consiste en un token secreto por sesión incluido en cada formulario. El servidor valida el token en las solicitudes POST/PUT/PATCH/DELETE; una solicitud falsificada desde otro origen no puede leerlo.
@csrf en Laravel Blade
Añada la directiva @csrf a todos los formularios HTML que modifiquen datos.
<form method="POST" action="/transfer">
@csrf
<input name="amount" type="number">
<button>Transfer</button>
</form>Middleware CSRF
El middleware VerifyCsrfToken de Laravel comprueba el encabezado X-CSRF-TOKEN o el campo _token en todas las solicitudes que no sean GET del grupo de middleware web.
CSRF en AJAX
Para las solicitudes AJAX, lea el token de la etiqueta meta y envíelo como encabezado.
// In the HTML head:
<meta name="csrf-token" content="{{ csrf_token() }}">
// In JavaScript (Axios):
axios.defaults.headers.common["X-CSRF-TOKEN"] =
document.querySelector("meta[name=csrf-token]").content;Exclusión de rutas
Normalmente, las rutas de API que utilizan tokens de Sanctum se excluyen de la protección CSRF porque usan autenticación basada en tokens en lugar de cookies.
<?php
// In VerifyCsrfToken $except:
protected $except = [
"api/*",
"webhooks/*",
];Atributo de cookie SameSite
Establecer SameSite=Strict o Lax en la cookie de sesión proporciona una capa adicional de defensa contra CSRF en los navegadores modernos.
Patrón de doble envío de cookies
Una defensa CSRF alternativa para las API: envíe el token tanto en una cookie como en un encabezado de solicitud. El servidor comprueba que coincidan; las solicitudes entre orígenes no pueden leer las cookies.
CSRF en contextos de API
Las API REST que se autentican con tokens Bearer (Sanctum, JWT) no son vulnerables a CSRF porque los tokens se almacenan en localStorage (el navegador no los envía automáticamente).
Pruebas de CSRF
Los asistentes de pruebas de Laravel incluyen automáticamente tokens CSRF. También puede comprobar que se rechacen las solicitudes POST sin protección.
<?php
// With token:
$this->post("/transfer", ["_token" => csrf_token(), "amount" => 100]);
// Simulating CSRF attack (no token):
$this->withoutMiddleware(VerifyCsrfToken::class)->post("/transfer", [...]);Resumen
La protección CSRF requiere un token oculto en todos los formularios que cambien el estado. Laravel gestiona esto automáticamente con @csrf. Para AJAX, añada el token como encabezado HTTP. Las rutas de API que utilizan tokens Bearer no se ven afectadas.
Comprobación rápida
¿Cómo se añade protección CSRF a un formulario de Laravel Blade?
Preguntas frecuentes
¿La lección «Protección contra CSRF» es gratis?
Sí — el texto completo de «Protección contra CSRF» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Protección contra CSRF»?
Genere y valide tokens CSRF en formularios para evitar solicitudes falsificadas. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Protección contra CSRF»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Prevención de cross-site scripting (XSS)
- Inyección SQL y consultas parametrizadas
- Protección contra CSRF
- Almacenamiento seguro de contraseñas