# API Security & Performance Monitoring ## 📋 Vue d'ensemble SystĂšme complet de sĂ©curitĂ© et monitoring pour l'API GeoSector implĂ©mentĂ© et opĂ©rationnel. ### ✅ FonctionnalitĂ©s implĂ©mentĂ©es - **DĂ©tection d'intrusions** : Brute force, SQL injection, patterns de scan - **Monitoring des performances** : Temps de rĂ©ponse, utilisation mĂ©moire, requĂȘtes DB - **Alertes email intelligentes** : Throttling, niveaux de prioritĂ© - **Blocage d'IP automatique** : Temporaire ou permanent - **TraçabilitĂ© complĂšte** : Historique pour audit et analyse ## đŸ—ïž Architecture ### Tables de base de donnĂ©es (prĂ©fixe `sec_`) ```sql -- 4 tables créées dans scripts/sql/create_security_tables.sql sec_alerts -- Alertes de sĂ©curitĂ© sec_performance_metrics -- MĂ©triques de performance sec_failed_login_attempts -- Tentatives de connexion Ă©chouĂ©es sec_blocked_ips -- IPs bloquĂ©es ``` ### Services PHP implĂ©mentĂ©s ``` src/Services/Security/ ├── AlertService.php # Gestion centralisĂ©e des alertes ├── EmailThrottler.php # Anti-spam pour emails ├── SecurityMonitor.php # DĂ©tection des menaces ├── PerformanceMonitor.php # Monitoring des temps └── IPBlocker.php # Gestion des blocages IP ``` ### ContrĂŽleur d'administration ``` src/Controllers/SecurityController.php # Interface d'administration ``` ## 🚀 Installation ### 1. CrĂ©er les tables ```bash # ExĂ©cuter le script SQL sur chaque environnement mysql -u root -p geo_app < scripts/sql/create_security_tables.sql ``` ### 2. Configurer le cron de purge ```bash # Ajouter dans crontab (crontab -e) 0 2 * * * /usr/bin/php /var/www/geosector/api/scripts/cron/cleanup_security_data.php >> /var/log/security_cleanup.log 2>&1 ``` ### 3. Tester l'installation ```bash php test_security.php ``` ## 🔒 Fonctionnement ### DĂ©tection automatique Le systĂšme dĂ©tecte et bloque automatiquement : - **Brute force** : 5 tentatives Ă©chouĂ©es en 5 minutes → IP bloquĂ©e 1h - **SQL injection** : Patterns suspects → IP bloquĂ©e dĂ©finitivement - **Scan de vulnĂ©rabilitĂ©s** : AccĂšs aux fichiers sensibles → IP bloquĂ©e 1h - **Rate limiting** : Plus de 60 requĂȘtes/minute → Rejet temporaire ### Monitoring de performance Chaque requĂȘte est automatiquement monitorĂ©e : ```php // Dans index.php PerformanceMonitor::startRequest(); // ... traitement ... PerformanceMonitor::endRequest($endpoint, $method, $statusCode); ``` ### Alertes email Configuration des niveaux : - **INFO** : Log uniquement - **WARNING** : Email avec throttling 1h - **ERROR** : Email avec throttling 15min - **CRITICAL** : Email avec throttling 5min - **SECURITY** : Email immĂ©diat, prioritĂ© haute ## 📊 Endpoints d'administration Tous les endpoints nĂ©cessitent une authentification admin (role >= 2) : ``` GET /api/admin/metrics # MĂ©triques de performance GET /api/admin/alerts # Alertes actives POST /api/admin/alerts/:id/resolve # RĂ©soudre une alerte GET /api/admin/blocked-ips # IPs bloquĂ©es POST /api/admin/unblock-ip # DĂ©bloquer une IP POST /api/admin/block-ip # Bloquer une IP manuellement GET /api/admin/security-report # Rapport complet POST /api/admin/cleanup # Nettoyer les anciennes donnĂ©es POST /api/admin/test-alert # Tester les alertes ``` ## 🔧 Configuration ### Seuils par dĂ©faut (modifiables dans les services) ```php // PerformanceMonitor.php const DEFAULT_THRESHOLDS = [ 'response_time_warning' => 1000, // 1 seconde 'response_time_critical' => 3000, // 3 secondes 'db_time_warning' => 500, // 500ms 'db_time_critical' => 1000, // 1 seconde 'memory_warning' => 64, // 64 MB 'memory_critical' => 128 // 128 MB ]; // SecurityMonitor.php - Brute force : 5 tentatives en 5 minutes - Rate limit : 60 requĂȘtes par minute - 404 pattern : 10 erreurs 404 en 10 minutes // EmailThrottler.php const DEFAULT_CONFIG = [ 'max_per_hour' => 10, 'max_per_day' => 50, 'digest_after' => 5, 'cooldown_minutes' => 60 ]; ``` ### RĂ©tention des donnĂ©es ConfigurĂ©e dans `scripts/cron/cleanup_security_data.php` : ```php $RETENTION_DAYS = [ 'performance_metrics' => 30, // 30 jours 'failed_login_attempts' => 7, // 7 jours 'resolved_alerts' => 90, // 90 jours 'expired_blocks' => 0 // DĂ©blocage immĂ©diat ]; ``` ## 📈 MĂ©triques surveillĂ©es ### Performance - Temps de rĂ©ponse total - Temps cumulĂ© des requĂȘtes DB - Nombre de requĂȘtes DB - Utilisation mĂ©moire (pic et moyenne) - Codes HTTP de rĂ©ponse ### SĂ©curitĂ© - Tentatives de connexion Ă©chouĂ©es - IPs bloquĂ©es (temporaires/permanentes) - Patterns d'attaque dĂ©tectĂ©s - Alertes par type et niveau ## đŸ›Ąïž Patterns de dĂ©tection ### SQL Injection ```php // Patterns dĂ©tectĂ©s dans SecurityMonitor.php - UNION SELECT - DROP TABLE - INSERT INTO - UPDATE SET - DELETE FROM - Script tags - OR 1=1 - Commentaires SQL (--) ``` ### Fichiers sensibles ```php // Patterns de scan dĂ©tectĂ©s - admin, administrator - wp-admin, phpmyadmin - .git, .env - config.php - backup, .sql, .zip - shell.php, eval.php ``` ## 📝 Exemples d'utilisation ### DĂ©clencher une alerte manuelle ```php use App\Services\Security\AlertService; AlertService::trigger('CUSTOM_ALERT', [ 'message' => 'ÉvĂ©nement important dĂ©tectĂ©', 'details' => ['user' => $userId, 'action' => $action] ], 'WARNING'); ``` ### Bloquer une IP manuellement ```php use App\Services\Security\IPBlocker; // Blocage temporaire (1 heure) IPBlocker::block('192.168.1.100', 3600, 'Comportement suspect'); // Blocage permanent IPBlocker::blockPermanent('192.168.1.100', 'Attaque confirmĂ©e'); ``` ### Obtenir les statistiques ```php use App\Services\Security\SecurityMonitor; use App\Services\Security\PerformanceMonitor; $securityStats = SecurityMonitor::getSecurityStats(); $perfStats = PerformanceMonitor::getStats(null, 24); // 24h ``` ## ⚠ Points d'attention ### RGPD - Les IPs sont des donnĂ©es personnelles - DurĂ©e de conservation limitĂ©e (voir rĂ©tention) - Anonymisation aprĂšs traitement ### Performance - Overhead < 5ms par requĂȘte - Optimisation des tables avec index - Purge automatique des anciennes donnĂ©es ### SĂ©curitĂ© - Pas d'exposition de donnĂ©es sensibles dans les alertes - Chiffrement des donnĂ©es utilisateur - Whitelist pour IPs de confiance (localhost) ## 🔄 Maintenance ### Quotidienne (cron) ```bash # Purge automatique Ă  2h du matin 0 2 * * * php /var/www/geosector/api/scripts/cron/cleanup_security_data.php ``` ### Hebdomadaire - VĂ©rifier les alertes actives - Analyser les tendances de performance - Ajuster les seuils si nĂ©cessaire ### Mensuelle - Analyser le rapport de sĂ©curitĂ© - Mettre Ă  jour les IPs whitelist/blacklist - Optimiser les tables si nĂ©cessaire ## 🐛 DĂ©pannage ### Les tables n'existent pas ```bash # CrĂ©er les tables mysql -u root -p geo_app < scripts/sql/create_security_tables.sql ``` ### Pas d'alertes email - VĂ©rifier la configuration email dans `AppConfig` - VĂ©rifier les logs : `tail -f logs/geosector-*.log` - Tester avec : `POST /api/admin/test-alert` ### IP bloquĂ©e par erreur ```bash # Via API curl -X POST https://dapp.geosector.fr/api/admin/unblock-ip \ -H "Authorization: Bearer TOKEN" \ -d '{"ip": "192.168.1.100"}' # Via MySQL UPDATE sec_blocked_ips SET unblocked_at = NOW() WHERE ip_address = '192.168.1.100'; ``` ## 📚 Ressources - [OWASP Top 10](https://owasp.org/www-project-top-ten/) - [PHP Security Best Practices](https://www.php.net/manual/en/security.php) - Code source : `/src/Services/Security/` - Tests : `test_security.php` - Logs : `/logs/geosector-*.log` ## 🎯 Statut d'implĂ©mentation ✅ **Phase 1** : Infrastructure de base - COMPLÉTÉ - Tables créées avec prĂ©fixe `sec_` - Services PHP implĂ©mentĂ©s - IntĂ©gration dans index.php et Database.php ✅ **Phase 2** : Monitoring de Performance - COMPLÉTÉ - ChronomĂ©trage automatique des requĂȘtes - Monitoring des requĂȘtes DB - Alertes sur dĂ©gradation ✅ **Phase 3** : DĂ©tection d'intrusions - COMPLÉTÉ - DĂ©tection brute force - DĂ©tection SQL injection - Blocage IP automatique ✅ **Phase 4** : Alertes Email - COMPLÉTÉ - Service d'alertes avec throttling - Templates d'emails - Niveaux de prioritĂ© ✅ **Phase 5** : Administration - COMPLÉTÉ - Endpoints d'administration - Interface de gestion - Rapports de sĂ©curitĂ© ✅ **Phase 6** : Maintenance - COMPLÉTÉ - Script de purge automatique - Optimisation des tables - Documentation complĂšte --- *DerniĂšre mise Ă  jour : 2025-01-17* *Version : 1.0.0*