300) { // 5 minutes session_regenerate_id(true); $_SESSION['last_regeneration'] = time(); } } // Fonction pour vérifier les tentatives de connexion function checkLoginAttempts($ip) { $attempts_file = __DIR__ . '/login_attempts.json'; if (!file_exists($attempts_file)) { return true; } $attempts_data = file_get_contents($attempts_file); $attempts = $attempts_data ? json_decode($attempts_data, true) : []; if (isset($attempts[$ip])) { $last_attempt = $attempts[$ip]['last_attempt']; $attempt_count = $attempts[$ip]['count']; // Si le délai de blocage est écoulé, réinitialiser if (time() - $last_attempt > LOGIN_LOCKOUT_TIME) { unset($attempts[$ip]); file_put_contents($attempts_file, json_encode($attempts)); return true; } // Si trop de tentatives if ($attempt_count >= MAX_LOGIN_ATTEMPTS) { return false; } } return true; } // Fonction pour enregistrer une tentative de connexion function recordLoginAttempt($ip, $success = false) { $attempts_file = __DIR__ . '/login_attempts.json'; $attempts_data = file_exists($attempts_file) ? file_get_contents($attempts_file) : '{}'; $attempts = json_decode($attempts_data, true) ?: []; if ($success) { // Supprimer les tentatives en cas de succès if (isset($attempts[$ip])) { unset($attempts[$ip]); } } else { // Enregistrer la tentative échouée $attempts[$ip] = [ 'count' => ($attempts[$ip]['count'] ?? 0) + 1, 'last_attempt' => time() ]; } file_put_contents($attempts_file, json_encode($attempts)); } // Générer un token CSRF function generateCSRFToken() { if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } return $_SESSION['csrf_token']; } // Vérifier le token CSRF function verifyCSRFToken($token) { return isset($_SESSION['csrf_token']) && hash_equals($_SESSION['csrf_token'], $token); } // Vérifier si l'utilisateur est connecté et la session est valide function isAuthenticated() { if (!isset($_SESSION['connected']) || !$_SESSION['connected']) { return false; } // Vérifier le timeout de session if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > SESSION_TIMEOUT)) { session_destroy(); return false; } // Mettre à jour l'activité $_SESSION['last_activity'] = time(); return true; } // Nettoyer et valider les données d'entrée function sanitizeInput($data) { return htmlspecialchars(trim($data), ENT_QUOTES, 'UTF-8'); } ?>