Maison > développement back-end > tutoriel php > Comment puis-je sécuriser mes formulaires Web contre les attaques CSRF à l'aide de PHP ?

Comment puis-je sécuriser mes formulaires Web contre les attaques CSRF à l'aide de PHP ?

Linda Hamilton
Libérer: 2024-12-09 05:37:14
original
975 Les gens l'ont consulté

How Can I Secure My Web Forms Against CSRF Attacks Using PHP?

Sécurisation des formulaires Web à l'aide de jetons CSRF : un guide complet avec des exemples PHP

La falsification de requêtes intersites (CSRF) est une technique d'attaque malveillante qui exploite les vulnérabilités du Web pour effectuer des actions non autorisées au nom d'un utilisateur. Pour protéger votre site Web contre CSRF, la mise en œuvre d’un mécanisme de jeton robuste est cruciale. Cet article fournit un guide détaillé sur l'ajout de jetons CSRF à l'aide de PHP, en abordant les défis rencontrés au cours du processus.

Génération de jetons sécurisés

Lors de la génération de jetons CSRF, il est essentiel d'utiliser sources aléatoires fiables pour éviter la prévisibilité et garantir une entropie suffisante. PHP 7 propose la fonction random_bytes(), tandis que PHP 5.3 peut utiliser mcrypt_create_iv() ou openssl_random_pseudo_bytes() à cette fin. Évitez les méthodes vulnérables comme rand() ou md5().

Exemple pour PHP 7 :

if (empty($_SESSION['token'])) {
    $_SESSION['token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['token'];
Copier après la connexion

Exemple pour PHP 5.3 (ou avec ext- mcrypt):

if (empty($_SESSION['token'])) {
    if (function_exists('mcrypt_create_iv')) {
        $_SESSION['token'] = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
    } else {
        $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32));
    }
}
$token = $_SESSION['token'];
Copier après la connexion

Intégration avec Formulaires

Dans vos formulaires HTML, incluez un champ de saisie pour transporter en toute sécurité le jeton CSRF généré vers le serveur :

<input type="hidden" name="token" value="<?php echo $token; ?>" />
Copier après la connexion

Vérification du jeton

Lorsque le formulaire est soumis, vérifiez le jeton soumis avec celui stocké dans le session :

if (!empty($_POST['token'])) {
    if (hash_equals($_SESSION['token'], $_POST['token'])) {
         // Proceed to process the form data
    } else {
         // Log this as a warning and keep an eye on these attempts
    }
}
Copier après la connexion

Jetons par formulaire et HMAC

Pour plus de sécurité, envisagez d'utiliser des jetons par formulaire. Générez une clé HMAC distincte et utilisez hash_hmac() pour verrouiller le jeton CSRF sur un formulaire spécifique.

$calc = hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
if (hash_equals($calc, $_POST['token'])) {
    // Continue...
}
Copier après la connexion

Approche hybride avec Twig

Les utilisateurs de Twig peuvent tirer parti d'une fonction personnalisée pour générer des jetons généraux et verrouillés :

{{ form_token() }}
{{ form_token('/my_form.php') }}
Copier après la connexion

À usage unique Jetons CSRF

Pour les scénarios nécessitant des jetons à usage unique, envisagez d'utiliser une bibliothèque externe, telle que la bibliothèque Anti-CSRF de Paragon Initiative Enterprises, qui gère le rachat et l'expiration des jetons.

Par en mettant en œuvre ces techniques, vous pouvez protéger efficacement votre site Web contre les attaques CSRF et garantir l'intégrité des interactions des utilisateurs.

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