Une attaque CSRF (cross-site request forgery) est un type d'attaque réseau dans lequel un attaquant incite un utilisateur à effectuer des actions involontaires au sein de l'application Web de la victime.
Les attaques CSRF exploitent le fait que la plupart des applications Web permettent d'envoyer des requêtes entre différentes pages au sein du même nom de domaine. L'attaquant crée une page malveillante qui envoie des requêtes à l'application de la victime, déclenchant des actions non autorisées.
1. Utilisez des tokens anti-CSRF :
// 生成令牌并存储在会话中 $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); // 在表单中包含隐藏字段 <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>"> // 验证提交的令牌 if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) { // 令牌无效,拒绝请求 }
2. Utiliser le modèle de jeton de synchronisation :
// 在首次加载页面时生成令牌并存储在 Cookie 中 setcookie('csrf_token', bin2hex(random_bytes(32)), time() + 3600, '/'); // 在表单提交时,将令牌作为 HTTP 头发送 $headers = getallheaders(); $csrf_token = $headers['X-CSRF-Token']; // 验证提交的令牌 if (!isset($csrf_token) || $csrf_token !== $_COOKIE['csrf_token']) { // 令牌无效,拒绝请求 }
Par exemple, bloquer les attaques CSRF sur les transferts de fonds dans les portefeuilles :
// 在用户加载转账页面时生成令牌 $transfer_token = bin2hex(random_bytes(32)); // 在表单中包含隐藏字段 <input type="hidden" name="transfer_token" value="<?php echo $transfer_token; ?>"> // 验证提交的令牌 if (!isset($_POST['transfer_token']) || $_POST['transfer_token'] !== $transfer_token) { // 令牌无效,拒绝转账请求 }
En mettant en œuvre ces mesures, vous pouvez prévenir efficacement les attaques CSRF et protéger vos applications PHP.
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!