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 {