
laravel-threat-detection v1.7.2
Middleware pasivo de Laravel que detecta y registra inyección SQL, XSS, RCE, escáneres de bots y más de 175 patrones de ataque. Incluye un panel integrado, alertas de Slack, API REST y enriquecimiento geográfico. IDS, no WAF.
Laravel Threat Detection
Monitoreo de seguridad y registro de ataques para Laravel. Detecta y registra inyección SQL,
XSS, RCE, directory traversal, escáneres de bots y sondas de reconocimiento estilo /wp-admin —
cada solicitud hostil registrada en tu base de datos con el contexto completo de la aplicación.
Es un IDS, no un WAF: nunca bloquea, filtra ni modifica una solicitud.
¿Estás aquí porque viste algo como esto?
GET /wp-admin/setup-config.php 404 — on a site that isn't WordPress
GET /.env 404 — someone wants your database password
GET /?id=1' UNION SELECT password FROM 200 — SQL injection against a real route
GET /phpmyadmin/index.php 404 — scanning for an admin panel
Esas solicitudes ya están llegando a tu aplicación Laravel. Tu registro de acceso muestra la URL y el código de estado, y nada más — ni la carga útil decodificada, ni cuál de tus rutas fue el objetivo, ni si la misma IP ha intentado cuarenta cosas más esta hora.
Este paquete responde a esas preguntas. Colócalo en cualquier aplicación Laravel 10–13 y comenzará a escanear cada solicitud HTTP contra más de 150 patrones de ataque, puntuando cada coincidencia por confianza y escribiéndola en tu base de datos — con un panel integrado, alertas de Slack, enriquecimiento geográfico y exportaciones para fail2ban/listas de bloqueo. Ninguna solicitud se bloquea nunca. Piensa en una cámara de seguridad, no en una cerradura: te muestra exactamente quién está sondeando tus rutas, con qué frecuencia y con qué técnicas.
Extraído de una aplicación en producción y probado en batalla con tráfico real. Más de 2.400 pruebas, sin dependencias en tiempo de ejecución más allá de Laravel mismo, y sin necesidad de conexión a internet para la detección.
¿Actualizando? Consulta UPGRADING.md. ¿Contribuyendo? Consulta CONTRIBUTING.md.
Comienza en menos de un minuto
composer require jayanta/laravel-threat-detection
php artisan vendor:publish --tag=threat-detection-migrations
php artisan migrate
Luego añade el middleware a tu grupo web (una línea en bootstrap/app.php en Laravel 11+,
o app/Http/Kernel.php en Laravel 10) — el fragmento completo está en Quick Start más abajo.
Eso es todo; la detección está activa.
php artisan threat-detection:doctor # confirms it is actually recording
Dónde encaja: IDS vs WAF vs edge
Este paquete es un IDS pasivo a nivel de aplicación — observa y registra, no bloquea. Está pensado para situarse junto a un WAF o un servicio de edge, no para reemplazarlos. Cada capa ve algo que las demás no pueden:
| Este paquete (IDS de aplicación) | WAF (ModSecurity + OWASP CRS, Cloudflare WAF) | Edge / CDN (Cloudflare) | |
|---|---|---|---|
| Bloquea peticiones maliciosas | ❌ solo registra | ✅ | ✅ |
| Contexto completo de la app (URL exacta, payload decodificado, usuario autenticado) | ✅ | ⚠️ parcial | ❌ |
| Panel integrado + registro de amenazas en tu BD | ✅ | ⚠️ varía | ⚠️ solo en el edge |
| Detecciones específicas de la app (p. ej. PII de Aadhaar / PAN / IFSC) | ✅ integradas + personalizadas | ⚠️ escribe tus propias reglas | ⚠️ reglas personalizadas, según el plan |
| Funciona sin conexión / sin servicio externo | ✅ | ⚠️ depende | ❌ |
| Detiene el tráfico antes de que llegue a tu servidor | ❌ | ⚠️ solo WAF en la nube | ✅ |
| Configuración | composer require, migrar, una línea de middleware | media–alta | baja–media |
| Coste | gratis, MIT | varía | capa gratuita + de pago |
La versión corta: un edge/WAF es la cerradura de la puerta; esto es la cámara de seguridad de dentro, con el contexto de la app para decirte exactamente qué se está intentando en qué ruta, por quién y con qué frecuencia. Úsalo para alimentar decisiones reales — baneos de fail2ban, límites de tasa, bloqueo geográfico — con datos que tu capa de edge nunca ve.
Lo que deliberadamente NO es
- No es un WAF. Nunca bloquea, filtra ni modifica una petición. Usa Cloudflare, mod_security o un WAF real para la aplicación de políticas. (¿No tienes una capa de edge a la que delegar? Los helpers del lado del operador exponen las decisiones del paquete para que puedas escribir tu propio middleware de bloqueo de cinco líneas — el código de aplicación de políticas sigue siendo tuyo, no del paquete.)
- No es un reemplazo de la codificación segura. Las consultas parametrizadas, la validación de entrada y el escapado de salida son tus defensas reales. Este paquete asume que tu código ya es seguro y te da visibilidad, no protección.
- No es un servicio de edge. Si puedes poner Cloudflare delante, hazlo — luego añade esto para el detalle a nivel de aplicación que los servicios de edge no pueden ver.
- No es un detector completo, y no puede serlo. La coincidencia de patrones captura ataques que parecen ataques conocidos. Una técnica novedosa, o una conocida reescrita lo suficiente, pasará sin registrarse — y no se te avisará de que lo hizo. El silencio aquí significa "no coincidió nada", nunca "no pasó nada". Donde se gana su lugar es en el tráfico de alto volumen y bajo esfuerzo que constituye la mayor parte de lo que realmente golpea una app Laravel pública: escáneres, sondas de reconocimiento, cadenas de inyección listas para usar, ataques de credenciales. Trata un registro silencioso como ausencia de evidencia, no como evidencia de ausencia.