ikwook / sentinel-shield
Detection d'attaques web, alertes (dashboard + e-mail) et blocage d'IP pour CodeIgniter 4 et Laravel.
Package info
github.com/freddylihamba2024/ikwook-sentinel-shield
pkg:composer/ikwook/sentinel-shield
Requires
- php: ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.6 || ^10.5
Suggests
- codeigniter4/framework: ^4.4 pour l'adaptateur CodeIgniter
- laravel/framework: ^10 || ^11 || ^12 pour l'adaptateur Laravel
Provides
None
Conflicts
None
Replaces
None
This package is not auto-updated.
Last update: 2026-11-05 10:53:00 UTC
README
Détection d'attaques web, alertes (dashboard + e-mail) et blocage d'IP pour CodeIgniter 4 et Laravel. Un seul cœur PHP, un seul dashboard, deux adaptateurs.
- Détecte : injection SQL, XSS, injection de commande/code/en-têtes, SSRF, accès aux fichiers système, recherche de fichiers sensibles, outils de scan.
- Lève des alertes (attaques répétées, connexions échouées répétées, accès refusés répétés) avec conseils.
- Dashboard : vue d'ensemble, alertes filtrables, détail, IP bloquées, journal, réglages.
- Mails : alerte immédiate pour une attaque bloquée, résumé périodique des autres.
- Alerte seulement par défaut : le blocage automatique doit être activé explicitement.
Prérequis : PHP 8.0+, CodeIgniter 4.4+ ou Laravel 10+.
Laravel
composer require ikwook/sentinel-shield
php artisan sentinel:install # publie la config + migre
Le provider, le middleware global, la tâche planifiée (sentinel:scan toutes les 5 min, il faut schedule:run en cron) et l'écoute des échecs de connexion (Illuminate\Auth\Events\Failed) sont automatiques.
Le dashboard (/security-alerts) est fermé par défaut. Ouvrez-le avec une habilitation :
Gate::define('viewSentinelShield', fn ($user) => $user->is_admin);
Mails : SENTINEL_MAIL_ENABLED=true, SENTINEL_MAIL_TO=secu@exemple.com (utilise votre configuration Mail).
CodeIgniter 4
composer require ikwook/sentinel-shield
php spark sentinel:install # migrations du package
Le filtre global, les routes et les commandes sont découverts automatiquement. Ajoutez au cron : */5 * * * * php /chemin/spark sentinel:scan.
Le dashboard est fermé par défaut. Créez une classe AccessGate :
class AdminGate implements \Ikwook\SentinelShield\Contracts\AccessGate { public function allows(): bool { return session('role') === 'admin'; } }
puis dans .env : sentinelshield.gate = 'App\Libraries\AdminGate'.
Autres options .env : sentinelshield.autoBlock, sentinelshield.mailEnabled, sentinelshield.mailTo, sentinelshield.mailFrom, sentinelshield.appName, sentinelshield.uiPrefix, sentinelshield.dbGroup. Les seuils se règlent via Config\SentinelShield::$settings (voir Core\Settings::DEFAULTS).
Échecs de connexion (à appeler dans votre code d'authentification) :
helper('sentinel'); sentinel_login_failed($username); // et sentinel_access_denied() pour un accès refusé
Sécurité et limites à connaître
- Proxy inverse / CDN : l'IP vue par l'application doit être la vraie IP du client (
trustedProxiesLaravel,Config\App::$proxyIPsCI4). Sinon toutes les attaques semblent venir du proxy. Les IP privées et127.0.0.1ne sont jamais bloquées automatiquement. - La détection repose sur des signatures dans l'URL, la query et les formulaires (motifs stricts). Ce n'est pas un WAF : elle complète, ne remplace pas, les requêtes préparées, l'échappement et la mise à jour de vos dépendances.
- Les valeurs suspectes ne sont pas conservées ; seules les catégories, l'IP, la méthode et le chemin le sont.
- Le package ne casse jamais la requête : toute erreur interne laisse passer la requête et est journalisée.
- Le dashboard n'écrit que via formulaires protégés CSRF et refuse de bloquer votre propre IP.
- Les corps JSON ne sont pas inspectés côté CodeIgniter.
- Les dates sont stockées en UTC et affichées dans le fuseau de l'application.
Tests
composer install && vendor/bin/phpunit
Architecture
| Dossier | Rôle |
|---|---|
src/Core |
Détecteur, moteur (Sentinel), règles, mail HTML — sans dépendance framework |
src/Contracts |
Store, Mailer, AccessGate |
src/Store |
QueryStore : SQL portable (MySQL, PostgreSQL, SQLite) |
src/Ui |
Dashboard commun (PHP pur, sans build JS) |
src/CodeIgniter |
Filtre, routes, commandes, migrations, config |
src/Laravel |
ServiceProvider, middleware, commandes, migrations, routes |
Licence MIT.