Buenas Prácticas de Seguridad en Laravel
Guía completa de seguridad para aplicaciones Laravel que protege contra vulnerabilidades comunes.
Cuándo Activar
- Agregar autenticación o autorización
- Manejar entrada de usuarios y subida de archivos
- Construir nuevos endpoints de API
- Gestionar secretos y configuración de entornos
- Reforzar despliegues en producción
Cómo Funciona
- El middleware proporciona protecciones de base (CSRF mediante
VerifyCsrfToken, cabeceras de seguridad medianteSecurityHeaders). - Los guards y policies aplican el control de acceso (
auth:sanctum,$this->authorize, middleware de policy). - Los Form Requests validan y dan forma a la entrada (
UploadInvoiceRequest) antes de que llegue a los servicios. - La limitación de velocidad agrega protección contra abusos (
RateLimiter::for('login')) junto con controles de autenticación. - La seguridad de datos proviene de casts encriptados, guards de asignación masiva y rutas firmadas (
URL::temporarySignedRoute+ middlewaresigned).
Configuración Principal de Seguridad
APP_DEBUG=falseen producciónAPP_KEYdebe estar establecido y rotarse al comprometerse- Establecer
SESSION_SECURE_COOKIE=trueySESSION_SAME_SITE=lax(ostrictpara apps sensibles) - Configurar proxies de confianza para la detección correcta de HTTPS
Reforzamiento de Sesión y Cookies
- Establecer
SESSION_HTTP_ONLY=truepara prevenir acceso desde JavaScript - Usar
SESSION_SAME_SITE=strictpara flujos de alto riesgo - Regenerar sesiones al iniciar sesión y al cambiar privilegios
Autenticación y Tokens
- Usar Laravel Sanctum o Passport para autenticación de API
- Preferir tokens de corta vida con flujos de actualización para datos sensibles
- Revocar tokens al cerrar sesión y en cuentas comprometidas
Ejemplo de protección de rutas:
Seguridad de Contraseñas
- Hashear contraseñas con
Hash::make()y nunca almacenar texto plano - Usar el password broker de Laravel para los flujos de restablecimiento
Autorización: Policies y Gates
- Usar policies para autorización a nivel de modelo
- Aplicar autorización en controladores y servicios
Usar middleware de policy para aplicación a nivel de ruta:
Validación y Sanitización de Datos
- Siempre validar entradas con Form Requests
- Usar reglas de validación estrictas y verificaciones de tipo
- Nunca confiar en los payloads de la request para campos derivados
Protección contra Asignación Masiva
- Usar
$fillableo$guardedy evitarModel::unguard() - Preferir DTOs o mapeo explícito de atributos
Prevención de Inyección SQL
- Usar Eloquent o el query builder con binding de parámetros
- Evitar SQL crudo a menos que sea estrictamente necesario
Prevención de XSS
- Blade escapa la salida por defecto (
{{ }}) - Usar
{!! !!}solo para HTML de confianza y sanitizado - Sanitizar texto enriquecido con una librería dedicada
Protección CSRF
- Mantener el middleware
VerifyCsrfTokenhabilitado - Incluir
@csrfen formularios y enviar tokens XSRF en requests de SPA
Para autenticación SPA con Sanctum, asegurarse de que las requests stateful estén configuradas:
Seguridad en Subida de Archivos
- Validar tamaño de archivo, tipo MIME y extensión
- Almacenar subidas fuera del directorio público cuando sea posible
- Escanear archivos en busca de malware si es necesario
Limitación de Velocidad
- Aplicar middleware
throttleen endpoints de autenticación y escritura - Usar límites más estrictos para login, restablecimiento de contraseña y OTP
Secretos y Credenciales
- Nunca hacer commit de secretos al control de versiones
- Usar variables de entorno y gestores de secretos
- Rotar claves después de una exposición e invalidar sesiones
Atributos Encriptados
Usar casts encriptados para columnas sensibles en reposo.
Cabeceras de Seguridad
- Agregar CSP, HSTS y protección de frames donde sea apropiado
- Usar configuración de proxies de confianza para forzar redirecciones HTTPS
Ejemplo de middleware para establecer cabeceras:
CORS y Exposición de API
- Restringir orígenes en
config/cors.php - Evitar orígenes wildcard para rutas autenticadas
Logging y PII
- Nunca registrar contraseñas, tokens o datos completos de tarjetas
- Redactar campos sensibles en logs estructurados
Seguridad de Dependencias
- Ejecutar
composer auditregularmente - Fijar dependencias con cuidado y actualizar rápidamente ante CVEs
URLs Firmadas
Usar rutas firmadas para enlaces temporales a prueba de manipulaciones.


