
laravel-threat-detection v1.3.1
Middleware de detección pasiva de amenazas para Laravel. Registra inyección SQL, XSS, RCE, escáneres de bots, sondeos 404 y más de 175 patrones de ataque. Panel de control integrado, exportación a fail2ban, alertas de Slack y API REST. 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 petición hostil queda 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 petición.
¿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. 1.857 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](https://github.com/jay123anta/laravel-threat-detection/blob/main/UPGRADING.md). ¿Contribuyendo? Consulta [CONTRIBUTING.md](https://github.com/jay123anta/laravel-threat-detection/blob/main/CONTRIBUTING.md).
## Comienza en menos de un minuto```bash
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.```bash
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 servicio edge, no para reemplazarlos. Cada capa ve
algo que las demás no pueden:
| | **Este paquete** (IDS de app) | **WAF** (mod_security, Cloudflare WAF) | **Edge / CDN** (Cloudflare) |
|---|:---:|:---:|:---:|
| Bloquea peticiones maliciosas | ❌ solo registra | ✅ | ✅ |
| Contexto completo de la app (ruta 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) | ✅ patrones personalizados | ❌ | ❌ |
| Funciona sin conexión / sin servicio externo | ✅ | ⚠️ depende | ❌ |
| Detiene el tráfico antes de que llegue a tu app | ❌ | ✅ edge | ✅ |
| Instalación | un `composer require` | media–alta | baja–media |
| Coste | gratis, MIT | varía | capa gratuita + de pago |
**La versión corta:** un edge/WAF es la cerradura de tu puerta; esto es la cámara de seguridad
*en el interior*, 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,
geobloqueo — con datos que tu capa 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 edge a la que delegar? Los
[helpers del lado del operador](#acting-on-the-data-operator-side-blocking) 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 edge.** Si puedes poner Cloudflare delante, hazlo — luego añade esto para el
detalle a nivel de aplicación que los servicios 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 ocurrió 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 de serie, rociado de
credenciales. Trata un registro silencioso como ausencia de evidencia, no como evidencia de ausencia.
### Espera que marque tu propio contenido desde el primer día
Una instalación sin ajustar se dispara con contenido legítimo, y deberías saberlo antes
de instalar en lugar de después. Estos son medidos, no hipotéticos — la suite
fija esta lista exacta para que no pueda desviarse ([`LegitimateTrafficCorpusTest`](https://github.com/jay123anta/laravel-threat-detection/blob/main/tests/Feature/LegitimateTrafficCorpusTest.php)):