Maison >développement back-end >tutoriel php >Comment implémenter en toute sécurité des jetons CSRF en PHP ?
Utilisation d'octets aléatoires pour une génération de jetons forte
Dans le Dans le contexte de la génération de jetons CSRF, l'utilisation de rand() et uniqid() présente des risques de sécurité en raison de leur prévisibilité et de leur entropie limitée. Optez plutôt pour :
session_start(); if (empty($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(32)); } $token = $_SESSION['token'];
Vérification sécurisée des jetons CSRF
Évitez d'utiliser des contrôles d'égalité directs (== ou ===). Utilisez plutôt hash_equals() pour PHP 5.6 ou paragonie/hash-compat pour les versions antérieures :
if (!empty($_POST['token'])) { if (hash_equals($_SESSION['token'], $_POST['token'])) { // Proceed to form data processing } else { // Log and monitor these attempts } }
Amélioration de la sécurité avec des jetons par formulaire
Pour restreindre les jetons à des formulaires spécifiques, utilisez hash_hmac() :
echo hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
$calc = hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']); if (hash_equals($calc, $_POST['token'])) { // Continue... }
Approche hybride pour la simplicité
Avec les modèles Twig, vous pouvez simplifier la génération de jetons à l'aide d'une fonction Twig personnalisée :
$twigEnv->addFunction( new \Twig_SimpleFunction( 'form_token', function($lock_to = null) { // ... } ) );
<input type="hidden" name="token" value="{{ form_token() }}" />
Ou, pour verrouillé jetons :
<input type="hidden" name="token" value="{{ form_token('/my_form.php') }}" />
Jetons CSRF à usage unique
Si nécessaire, pensez à utiliser une bibliothèque spécialisée pour gérer les jetons CSRF à usage unique, comme l'Anti-CSRF Bibliothèque par Paragon Initiative Enterprises.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!