production/Framework/Csrf.php
2026-04-18 22:02:15 +00:00

43 lines
1.2 KiB
PHP
Executable File

<?php
class Csrf
{
/**
* Génère UN seul token pour toute la session
*/
public static function generateToken(): string {
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
return $_SESSION['csrf_token'];
}
/**
* Valide le token soumis
*/
public static function validateToken(string $submittedToken): bool {
$sessionToken = $_SESSION['csrf_token'] ?? '';
if (empty($sessionToken)) return false;
// ✅ hash_equals évite les attaques par timing
return hash_equals($sessionToken, $submittedToken);
// ⚠️ On NE supprime PAS le token ici (réutilisable)
}
/**
* Champ HTML à insérer dans les formulaires
*/
public static function field(): string {
$token = self::generateToken();
return '<input type="hidden" name="csrf_token" value="' . htmlspecialchars($token) . '">';
}
/**
* Régénère le token (à appeler à la déconnexion)
*/
public static function regenerate(): void {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
}