2026-01-22
Par Santiago Bugnón
SeguridadLaravelOWASPBackendDevOps

Seguridad en aplicaciones Laravel: vulnerabilidades comunes y cómo evitarlas

Seguridad en aplicaciones Laravel: vulnerabilidades comunes y cómo evitarlas

La seguridad no es una feature. Es lo que queda cuando todo lo demás falla.

En Nebula, la seguridad forma parte de cada proyecto desde el día uno. No porque seamos paranoicos, sino porque los ataques reales no esperan a que alguien tenga tiempo para "pensar en seguridad después".

Laravel tiene mecanismos de defensa sólidos. Pero no son automáticos: hay que conocerlos, activarlos y usarlos correctamente. Acá explicamos las vulnerabilidades más comunes que encontramos en auditorías reales y cómo resolverlas.


Las vulnerabilidades más frecuentes en aplicaciones Laravel

1. Inyección SQL

Laravel tiene un ORM (Eloquent) y un query builder que escapan los parámetros automáticamente. El problema aparece cuando alguien usa consultas SQL crudas con variables del usuario interpoladas directamente.

El escenario típico: un desarrollador necesita una query que no puede hacer fácilmente con el ORM y escribe SQL crudo concatenando variables del request directamente en el string. Eso es el camino directo a un ataque de inyección SQL.

La solución: si necesitás queries crudas, Laravel permite usar parámetros de binding — placeholders que el framework escapa automáticamente. Nunca hay que concatenar variables de usuario en SQL directamente.

El ORM de Laravel existe exactamente para evitar este problema. Si estás evitándolo, preguntate por qué.

2. Cross-Site Scripting (XSS)

Blade, el motor de templates de Laravel, escapa automáticamente las variables cuando usás la sintaxis estándar. El problema es cuando se usa la sintaxis de "HTML sin escaping" para mostrar contenido dinámico que proviene del usuario.

La regla sin excepciones: nunca renderices HTML generado por el usuario sin sanitizarlo antes. Laravel tiene helpers para esto. Si necesitás mostrar HTML del usuario por alguna razón legítima, sanitizá con una librería dedicada antes de renderizar.

3. Mass Assignment

Eloquent permite crear o actualizar registros pasando directamente los datos del request. Si no definís explícitamente qué campos son asignables en masa (la propiedad fillable del modelo), un atacante puede incluir campos adicionales en el request — como role, is_admin o balance — y modificarlos.

Todos los modelos deben tener definido explícitamente qué campos pueden modificarse desde el exterior. Sin excepciones, sin el modelo con una lista vacía que "se completa después".

4. Autenticación débil

Los problemas más comunes que encontramos en auditorías:

  • Tokens de API almacenados en texto plano en la base de datos (deben guardarse como hashes)
  • Ausencia de rate limiting en endpoints de login (permite ataques de fuerza bruta ilimitados)
  • Tokens de reset de contraseña que no expiran o que pueden usarse múltiples veces
  • Sesiones que no se invalidan al cambiar la contraseña o al marcar una cuenta como comprometida
  • Laravel Sanctum y Passport proveen autenticación segura, pero hay que configurarlos correctamente. Los valores por defecto no siempre son suficientes para aplicaciones de producción.

    5. Exposición de información sensible

    Errores de configuración que exponen información que no debería ser pública:

  • **Modo debug activado en producción**: expone stack traces completos con rutas del servidor, variables de entorno y consultas SQL. Cualquier error en producción puede revelar información sensible de la infraestructura.
  • **Archivo .env accesible**: una mala configuración del servidor web puede exponer el archivo de variables de entorno con credenciales de base de datos, claves de API y secretos.
  • **Logs con datos sensibles**: logs que registran passwords en texto plano, tokens completos o números de tarjeta — muchas veces por error, en los logs de debug.

  • Lo que hacemos en cada proyecto

    Revisión de puntos de entrada

    Antes de cualquier cambio, mapeamos todos los puntos de entrada del sistema: formularios, endpoints de API, parámetros de URL, uploads de archivos, integraciones con terceros. Cada uno es una superficie de ataque potencial.

    HTTPS y headers de seguridad

    Todo en HTTPS, sin excepciones. Además, configuramos los headers HTTP que muchas aplicaciones ignoran: Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Strict-Transport-Security. Estos headers previenen categorías enteras de ataques con una línea de configuración.

    Validación en todos los bordes del sistema

    Toda entrada de usuario se valida con los Form Requests de Laravel antes de procesarse. Los archivos subidos se validan por tipo MIME real (no solo extensión), tamaño máximo y se almacenan fuera del directorio público. Los datos que van a mostrarse en HTML se sanitizan.

    Rate limiting en endpoints sensibles

    Login, registro, reset de contraseña y cualquier API pública tienen rate limiting configurado. No elimina ataques sofisticados, pero elimina el 90% del ruido automatizado que llega a cualquier sistema en producción.

    Monitoreo y alertas

    Los eventos de seguridad se registran: intentos de login fallidos repetidos, accesos desde IPs inusuales, errores críticos. Si no sabés que alguien está probando tu sistema, no podés defenderte.


    ¿Cuándo tiene sentido hacer una auditoría?

  • Antes del lanzamiento de un sistema nuevo que maneja datos sensibles o dinero
  • Después de incorporar un módulo de pagos o integraciones con terceros
  • Cuando el sistema va a escalar y más personas van a acceder a él
  • Cuando el código tiene varios años y fue tocado por múltiples desarrolladores sin un proceso de revisión consistente
  • Cuando hubo un incidente de seguridad — o casi

  • Seguridad sin excusas

    Las vulnerabilidades que describimos no son teóricas. Son las que encontramos en aplicaciones reales de empresas reales. Y la mayoría tiene solución directa si se identifica a tiempo.

    Si tenés un sistema Laravel en producción y no sabés con certeza si está bien protegido, es momento de averiguarlo.

    Hacemos auditorías de seguridad con un informe concreto: qué está mal, qué riesgo representa y cómo corregirlo. Sin alarmar innecesariamente, sin vender soluciones que no se necesitan.

    Agendá una auditoría de seguridad.

    SeguridadLaravelOWASPBackendDevOps
    Seguridad en aplicaciones Laravel: vulnerabilidades comunes y cómo evitarlas | Nebula Solutions | Nebula Solutions