Protección CSRF
En Laravel, la protección CSRF involucra código en diferentes partes de tu aplicación. Vamos a aclarar dónde se escribe cada parte, explicar detalladamente el código y mostrar cómo se vería en Chrome:
1. Definición de Rutas: routes/web.php
En el archivo routes/web.php
, defines las rutas de tu aplicación. Aquí es donde especificas qué acciones deben ocurrir cuando se accede a ciertas URLs. Por ejemplo:
use App\Http\Controllers\ProfileController;
Route::post('/profile', [ProfileController::class, 'update']);
Explicación Detallada del Código:
use App\Http\Controllers\ProfileController;
: Esta línea importa el controlador ProfileController para poder utilizarlo en la definición de la ruta.Route::post('/profile', [ProfileController::class, 'update']);
:Route::post
: Define una ruta que responde a solicitudes HTTP POST.'/profile'
: Es la URI a la que responderá esta ruta.[ProfileController::class, 'update']
: Especifica que el método ‘update’ del ProfileController manejará esta ruta.
2. Formularios HTML: Archivos de Vista Blade
Los formularios HTML con la directiva @csrf se escriben en tus archivos de vista Blade. Estos archivos generalmente se encuentran en el directorio resources/views
. Por ejemplo, podrías tener un archivo resources/views/profile/edit.blade.php
con el siguiente contenido:
<form method="POST" action="/profile">
@csrf
<input type="text" name="name" id="name">
<input type="email" name="email" id="email">
<button type="submit">Actualizar Perfil</button>
</form>
Explicación Detallada del Código:
<form method="POST" action="/profile">
:method="POST"
: Especifica que este formulario enviará datos utilizando el método HTTP POST.action="/profile"
: Indica la URL a la que se enviarán los datos del formulario.
@csrf
: Esta directiva de Blade genera un campo de formulario oculto con un token CSRF único.<input type="text" name="name" id="name">
: Campo de texto para el nombre del usuario.<input type="email" name="email" id="email">
: Campo de email para la dirección de correo del usuario.<button type="submit">Actualizar Perfil</button>
: Botón para enviar el formulario.
Visualización en Chrome:
Cuando accedas a www.conozcalaravel.test/profile/edit
en tu navegador Chrome, verás algo similar a esto:
Aunque no puedes ver el campo CSRF directamente en la interfaz, está presente en el formulario como un campo oculto. Puedes verificarlo inspeccionando el código fuente de la página en Chrome:
<form method="POST" action="/profile">
<input type="hidden" name="_token" value="random_token_here">
<input type="text" name="name" id="name">
<input type="email" name="email" id="email">
<button type="submit">Actualizar Perfil</button>
</form>
3. Controladores: app/Http/Controllers
La lógica para manejar las solicitudes se escribe en los controladores, que se encuentran en el directorio app/Http/Controllers
. Por ejemplo, podrías tener un ProfileController.php
con un método ‘update’:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProfileController extends Controller
{
public function update(Request $request)
{
// La protección CSRF ya ha sido verificada en este punto
// Lógica para actualizar el perfil
}
}
Explicación Detallada del Código:
namespace App\Http\Controllers;
: Define el namespace del controlador.use Illuminate\Http\Request;
: Importa la clase Request para manejar la solicitud HTTP.class ProfileController extends Controller
: Define la clase del controlador.public function update(Request $request)
:- Define el método ‘update’ que manejará la solicitud POST a ‘/profile’.
- El parámetro
$request
contiene todos los datos enviados en la solicitud.
4. Middleware CSRF: app/Http/Kernel.php
La protección CSRF se aplica automáticamente a través de un middleware. Este middleware ya está incluido por defecto en el grupo de middleware ‘web’ en el archivo app/Http/Kernel.php
:
protected $middlewareGroups = [
'web' => [
// ...
\App\Http\Middleware\VerifyCsrfToken::class,
// ...
],
];
Explicación Detallada del Código:
protected $middlewareGroups = [
: Define los grupos de middleware.'web' => [
: Especifica el grupo de middleware ‘web’.\App\Http\Middleware\VerifyCsrfToken::class,
: Incluye el middleware de verificación CSRF en el grupo ‘web’.
Conclusión
La protección CSRF en Laravel es un esfuerzo coordinado entre diferentes partes de tu aplicación. Cada parte juega un rol crucial en asegurar que tus formularios estén protegidos contra ataques CSRF. Aunque el token CSRF no es visible para el usuario en la interfaz de Chrome, está presente en el código fuente y se envía con cada solicitud POST, PUT, PATCH o DELETE.
Para más información, puedes consultar:
Etiqueta:rutas