Maison >développement back-end >tutoriel php >Comment implémenter en toute sécurité des jetons CSRF en PHP ?

Comment implémenter en toute sécurité des jetons CSRF en PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-08 00:39:12319parcourir

How to Securely Implement CSRF Tokens in PHP?

Comment implémenter des jetons CSRF en PHP : un guide complet

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn