Introduction
L'ajout de fortifications de sécurité appropriées à votre site Web implique de traiter vulnérabilités potentielles, y compris Cross-site Request Forgery (CSRF). Cet article explique comment ajouter efficacement un jeton CSRF à l'aide de PHP.
Comprendre le problème
Vous avez implémenté la protection des jetons CSRF sur votre site Web, mais la valeur du jeton est incohérente présents dans les formulaires HTML. Plus précisément, les formulaires « Contactez-nous » et AJAX présentent ce problème.
Révision du code
Examinons le code utilisé pour injecter le token :
PHP :
if (!isset($_SESSION)) { session_start(); $_SESSION['formStarted'] = true; } if (!isset($_SESSION['token'])) { $token = md5(uniqid(rand(), TRUE)); $_SESSION['token'] = $token; }
HTML :
<input type="hidden" name="token" value="<?php echo $token; ?>" />
Résoudre les faiblesses
Malheureusement, la méthode actuelle de génération de jetons utilise des techniques :
Mise en œuvre d'un jeton robuste Générateur
Pour sauvegarder vos formulaires, utilisez le code PHP suivant :
PHP 7 :
session_start(); if (empty($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(32)); } $token = $_SESSION['token'];
PHP 5.3 (ou avec ext-mcrypt):
session_start(); 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'];
Vérification du jeton
Ensuite, validez correctement le jeton CSRF pour empêcher les tentatives d'exploitation :
if (!empty($_POST['token'])) { if (hash_equals($_SESSION['token'], $_POST['token'])) { // Proceed to process the form data } else { // Log this as a warning and monitor such attempts } }
Supplémentaire Considérations
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!