Descripción general
revolution/laravel-fetch-metadata es un paquete de middleware de seguridad que valida las cabeceras HTTPSec-Fetch-* que envía el navegador. Puedes controlar qué peticiones se permiten en función del origen, el modo, el destino y si ha habido interacción del usuario.
Aprovechando las funcionalidades de seguridad integradas en el navegador, puedes evitar peticiones maliciosas desde orígenes no autorizados sin perjudicar la experiencia de los usuarios legítimos.
En Laravel 13, la protección CSRF pasó a usar la cabecera
Sec-Fetch-Site para la verificación del Origin. Consulta los detalles en Protección CSRF.Instalación
Registro de alias del middleware
Registra los alias de los middlewares enbootstrap/app.php.
Descripción de los middlewares
SecFetchSite
La cabeceraSec-Fetch-Site indica la relación entre el origen de la petición y el origen objetivo. Por defecto, solo se permiten same-origin y none (acceso directo).
| Valor | Descripción |
|---|---|
same-origin | Petición desde el mismo origen |
same-site | Petición desde el mismo site (por ejemplo, subdominios) |
cross-site | Petición desde un site distinto |
none | Petición iniciada por navegación, como cuando el usuario introduce la URL directamente |
SecFetchMode
La cabeceraSec-Fetch-Mode indica el modo de la petición. Por defecto se permiten navigate y cors.
| Valor | Descripción |
|---|---|
navigate | Petición de navegación como clics en enlaces o envío de formularios |
cors | Petición CORS |
no-cors | Petición no-cors |
same-origin | Petición del mismo origen |
websocket | Petición de conexión WebSocket |
SecFetchDest
La cabeceraSec-Fetch-Dest indica el tipo de recurso destino de la petición.
Consulta los detalles en la documentación de MDN.
SecFetchUser
La cabeceraSec-Fetch-User indica si la petición se ha iniciado por una interacción del usuario. Su único valor es ?1 (con interacción del usuario).
Ejemplos de uso en rutas
Uso básico
Indicar valores permitidos como parámetros
Indicar varios parámetros
Sin usar alias
Combinar varios middlewares
Manejo de errores
Si el valor de las cabecerasSec-Fetch-* no es válido, se lanza Symfony\Component\HttpKernel\Exception\BadRequestHttpException.
Puedes personalizar la respuesta en bootstrap/app.php.
Relación con la protección CSRF
En Laravel 13, el middlewarePreventRequestForgery realiza como primer paso de la protección CSRF una verificación del Origin mediante la cabecera Sec-Fetch-Site. Este paquete permite aprovechar las cabeceras de Fetch Metadata con una granularidad aún mayor y reforzar la seguridad de la aplicación.
Consulta los detalles en Protección CSRF.
Consulta la información más actualizada en el repositorio de GitHub.