
laravel-threat-detection v1.7.2
Пассивное middleware для Laravel, которое обнаруживает и логирует SQL-инъекции, XSS, RCE, бот-сканеры и более 175 паттернов атак. Включает встроенную панель управления, уведомления в Slack, REST API и геообогащение. IDS, а не WAF.
Laravel Threat Detection
Мониторинг безопасности и журналирование атак для Laravel. Обнаруживает и регистрирует SQL-инъекции,
XSS, RCE, обход каталогов, ботов-сканеров и разведочные запросы в стиле /wp-admin —
каждый враждебный запрос записывается в вашу базу данных с полным контекстом приложения.
Это IDS, а не WAF: он никогда не блокирует, не фильтрует и не изменяет запрос.
Вы здесь, потому что увидели что-то подобное?
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
Эти запросы уже достигают вашего Laravel-приложения. Ваш лог доступа показывает URL и код состояния, и больше ничего — ни декодированную полезную нагрузку, ни то, какой из ваших маршрутов был атакован, ни то, пытался ли тот же IP сделать сорок других вещей за этот час.
Этот пакет отвечает на эти вопросы. Установите его в любое приложение на Laravel 10–13, и он начнёт сканировать каждый HTTP-запрос по 150+ шаблонам атак, оценивая каждое совпадение по уровню достоверности и записывая его в вашу базу данных — со встроенной панелью управления, оповещениями в Slack, геообогащением и экспортом для fail2ban/блок-листов. Ни один запрос никогда не блокируется. Думайте о нём как о камере наблюдения, а не о замке: он показывает вам, кто именно прощупывает ваши маршруты, как часто и какими методами.
Извлечён из production-приложения и проверен в бою на реальном трафике. 2 400+ тестов, никаких runtime-зависимостей помимо самого Laravel, и для обнаружения не требуется подключение к интернету.
Обновляетесь? См. UPGRADING.md. Хотите внести вклад? См. CONTRIBUTING.md.
Начните меньше чем за минуту
composer require jayanta/laravel-threat-detection
php artisan vendor:publish --tag=threat-detection-migrations
php artisan migrate
Затем добавьте middleware в вашу группу web (одна строка в bootstrap/app.php на Laravel 11+,
или app/Http/Kernel.php на Laravel 10) — полный фрагмент в разделе Quick Start ниже.
Вот и всё; обнаружение работает.
php artisan threat-detection:doctor # confirms it is actually recording
Где это место: IDS против WAF против edge
Этот пакет — пассивный IDS уровня приложения — он наблюдает и записывает, но не блокирует. Он предназначен для работы рядом с WAF или edge-сервисом, а не для их замены. Каждый слой видит то, чего не видят другие:
| Этот пакет (app IDS) | WAF (ModSecurity + OWASP CRS, Cloudflare WAF) | Edge / CDN (Cloudflare) | |
|---|---|---|---|
| Блокирует вредоносные запросы | ❌ только логирует | ✅ | ✅ |
| Полный контекст приложения (точный URL, декодированный payload, аутентифицированный пользователь) | ✅ | ⚠️ частично | ❌ |
| Встроенный дашборд + журнал угроз в вашей БД | ✅ | ⚠️ зависит | ⚠️ только edge |
| Обнаружения, специфичные для приложения (например, Aadhaar / PAN / IFSC PII) | ✅ встроено + кастомные | ⚠️ пишите свои правила | ⚠️ кастомные правила, зависит от плана |
| Работает офлайн / без внешнего сервиса | ✅ | ⚠️ зависит | ❌ |
| Останавливает трафик до того, как он достигнет вашего сервера | ❌ | ⚠️ только облачный WAF | ✅ |
| Установка | composer require, миграция, одна строка middleware | средне–высокая | низкая–средняя |
| Стоимость | бесплатно, MIT | зависит | бесплатный тариф + платный |
Коротко: edge/WAF — это замок на двери; это — камера безопасности внутри, с контекстом приложения, позволяющим точно сказать, что пытаются сделать на каком маршруте, кем и как часто. Используйте это для принятия реальных решений — баны fail2ban, ограничения скорости, геоблокировка — на основе данных, которых ваш edge-слой никогда не видит.
Чем это намеренно НЕ является
- Не WAF. Он никогда не блокирует, не фильтрует и не изменяет запрос. Используйте Cloudflare, mod_security или настоящий WAF для принудительного применения. (Нет edge-слоя, которому можно передать управление? Помощники на стороне оператора предоставляют решения пакета, чтобы вы могли написать собственный middleware для блокировки в пять строк — код принудительного применения остаётся вашим, а не пакета.)
- Не замена безопасному кодированию. Параметризованные запросы, валидация входных данных и экранирование вывода — это ваша реальная защита. Этот пакет предполагает, что ваш код уже безопасен, и даёт вам видимость, а не защиту.
- Не edge-сервис. Если вы можете поставить Cloudflare впереди, сделайте это — затем добавьте это для детализации на уровне приложения, которую edge-сервисы не видят.
- Не полный детектор, и он не может им быть. Сопоставление с шаблонами ловит атаки, которые выглядят как известные атаки. Новая техника или знакомая, достаточно переписанная, пройдёт незалогированной — и вам не сообщат, что это произошло. Тишина здесь означает «ничего не совпало», а не «ничего не произошло». Своё место он оправдывает на высокообъёмном, малозатратном трафике, который составляет большую часть того, что реально попадает в публичное Laravel-приложение: сканеры, разведочные пробы, готовые строки инъекций, перебор учётных данных. Относитесь к тихому журналу как к отсутствию доказательств, а не как к доказательству отсутствия.