From dfce322094d14adc489ebe9d5eecc4a30832122c Mon Sep 17 00:00:00 2001 From: KANE LAZENI Date: Sat, 18 Apr 2026 22:02:15 +0000 Subject: [PATCH] a --- Framework/Csrf.php | 52 +++++++++++++++++----------------------------- Framework/Vue.php | 2 +- 2 files changed, 20 insertions(+), 34 deletions(-) diff --git a/Framework/Csrf.php b/Framework/Csrf.php index e3850456..584b1c9d 100755 --- a/Framework/Csrf.php +++ b/Framework/Csrf.php @@ -1,57 +1,43 @@ bin2hex(random_bytes(32)), - 'created_at' => time(), - ]; + public static function generateToken(): string { + if (empty($_SESSION['csrf_token'])) { + $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } - return $_SESSION['csrf_tokens'][$formName]['token']; + return $_SESSION['csrf_token']; } /** * Valide le token soumis */ - public static function validateToken(string $submittedToken, string $formName = 'default'): bool { - $session = $_SESSION['csrf_tokens'][$formName] ?? null; + public static function validateToken(string $submittedToken): bool { + $sessionToken = $_SESSION['csrf_token'] ?? ''; - if (!$session) return false; + if (empty($sessionToken)) return false; - // Expiration après 1 heure - if (time() - $session['created_at'] > 3600) { - self::destroyToken($formName); - return false; - } + // ✅ hash_equals évite les attaques par timing + return hash_equals($sessionToken, $submittedToken); - $valid = hash_equals($session['token'], $submittedToken); - - // Token à usage unique : on le supprime après validation - if ($valid) { - self::destroyToken($formName); - } - - return $valid; + // ⚠️ On NE supprime PAS le token ici (réutilisable) } /** - * Supprime un token + * Champ HTML à insérer dans les formulaires */ - public static function destroyToken(string $formName = 'default'): void { - unset($_SESSION['csrf_tokens'][$formName]); + public static function field(): string { + $token = self::generateToken(); + return ''; } /** - * Retourne le champ HTML caché à insérer dans les formulaires + * Régénère le token (à appeler à la déconnexion) */ - public static function field(string $formName = 'default'): string { - $token = self::generateToken($formName); - return '' - . ''; + public static function regenerate(): void { + $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } + } \ No newline at end of file diff --git a/Framework/Vue.php b/Framework/Vue.php index 133f65bc..088c532d 100755 --- a/Framework/Vue.php +++ b/Framework/Vue.php @@ -94,7 +94,7 @@ class Vue ob_start(); require $fichier; // 18/04/2026 => genérer - Csrf::field($fichier); + Csrf::field(); return ob_get_clean(); } else {