Maison  >  Article  >  développement back-end  >  Guide de sécurité du framework PHP : Comment prévenir les attaques CSRF ?

Guide de sécurité du framework PHP : Comment prévenir les attaques CSRF ?

WBOY
WBOYoriginal
2024-06-01 10:36:57399parcourir

PHP 框架安全指南:如何防止 CSRF 攻击?

Guide de sécurité du framework PHP : Comment prévenir les attaques CSRF ?

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.

Comment fonctionne le CSRF ?

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.

Comment prévenir les attaques CSRF ?

1. Utilisez des tokens anti-CSRF :

  • Attribuez un token unique à chaque utilisateur, stockez-le dans la session ou dans le cookie.
  • Incluez un champ caché dans l'application pour soumettre ce jeton.
  • Vérifiez que le jeton soumis correspond au jeton stocké.
// 生成令牌并存储在会话中
$_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 :

  • Lorsque la page est chargée pour la première fois, générez un jeton et stockez-le dans Cookie.
  • Lors de la soumission du formulaire, envoyez le jeton sous forme d'en-tête HTTP au serveur.
  • Vérifiez que le jeton soumis correspond au jeton stocké.
// 在首次加载页面时生成令牌并存储在 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']) {
    // 令牌无效,拒绝请求
}

Exemple pratique

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!

Déclaration:
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