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'];
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'];
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; ?>" />
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 } }
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... }
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') }}
À 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!