🛡️ Protección CSRF en formularios

🛡️ Protección CSRF en formularios

Protege tus formularios contra ataques de tipo CSRF

CSRF (Cross-Site Request Forgery) es un ataque donde un tercero malintencionado puede enviar peticiones en nombre de un usuario autenticado. Laravel incluye protección automática usando tokens CSRF para validar que los formularios sean enviados desde tu propia aplicación.

📘 ¿Qué es CSRF?

Un ataque CSRF aprovecha la sesión activa de un usuario para ejecutar acciones no deseadas, como cambiar su contraseña o realizar compras sin su consentimiento. Laravel evita esto insertando un token único en cada formulario que se debe verificar al enviar los datos.

⚙️ Uso básico de CSRF en Blade

Para proteger un formulario en Laravel, simplemente añade la directiva @csrf dentro del <form>:


<form action="{{ route('usuarios.store') }}" method="POST">
  @csrf
  <div class="mb-3">
    <label for="nombre" class="form-label">Nombre:</label>
    <input type="text" name="nombre" id="nombre" class="form-control" required>
  </div>

  <div class="mb-3">
    <label for="email" class="form-label">Correo electrónico:</label>
    <input type="email" name="email" id="email" class="form-control" required>
  </div>

  <button type="submit" class="btn btn-success">Guardar</button>
</form>
  

Laravel generará automáticamente un campo oculto como este:


<input type="hidden" name="_token" value="a1b2c3d4e5f6...">
  

🧠 Qué pasa si el token CSRF falta o es inválido

Si alguien intenta enviar un formulario sin token o con un token incorrecto, Laravel lanzará un error 419 (Page Expired):


<div class="alert alert-danger mt-5 text-center p-4 rounded">
  <h2>⚠️ Error 419 - Page Expired</h2>
  <p>Tu formulario no pudo ser procesado. Asegúrate de que se envíe desde nuestra aplicación.</p>
</div>
  

🔄 Formularios dinámicos y CSRF

Incluso si tus formularios se generan dinámicamente con Blade o componentes reutilizables, siempre debes incluir @csrf dentro del <form>:


<x-input name="nombre" label="Nombre" type="text" />
<x-input name="email" label="Correo electrónico" type="email" />

<form action="{{ route('usuarios.store') }}" method="POST">
  @csrf
  <x-input name="mensaje" label="Mensaje" type="text" />
  <button type="submit" class="btn btn-success">Enviar</button>
</form>
  
Consejo: Nunca deshabilites la verificación CSRF a menos que tengas un motivo muy específico y controles todas las solicitudes entrantes.

📚 En resumen:

  • CSRF protege tu aplicación contra solicitudes maliciosas de terceros.
  • Siempre incluye @csrf en tus formularios Blade.
  • Si el token es inválido o falta, Laravel retorna error 419.
  • Incluso los formularios dinámicos o componentes Blade requieren la directiva CSRF.

Publicar un comentario

0 Comentarios