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
Libérer: 2024-12-08 00:39:12
original
322 Les gens l'ont consulté

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'];
Copier après la connexion

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
    }
}
Copier après la connexion

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']);
Copier après la connexion
$calc = hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
if (hash_equals($calc, $_POST['token'])) {
    // Continue...
}
Copier après la connexion

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) { // ... }
    )
);
Copier après la connexion
<input type="hidden" name="token" value="{{ form_token() }}" />
Copier après la connexion

Ou, pour verrouillé jetons :

<input type="hidden" name="token" value="{{ form_token('/my_form.php') }}" />
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal