Maison  >  Article  >  développement back-end  >  Comment gérer les attaques de falsification de requêtes intersites (CSRF) en PHP ?

Comment gérer les attaques de falsification de requêtes intersites (CSRF) en PHP ?

WBOY
WBOYoriginal
2023-06-29 20:45:061050parcourir

Comment gérer les attaques de falsification de requêtes intersites (CSRF) en PHP ?

Aperçu :
Alors que les attaques réseau continuent d'évoluer, la protection de la sécurité des sites Web est devenue l'une des tâches importantes des développeurs. Les attaques CSRF (Cross-Site Request Forgery) constituent une menace de sécurité courante. Les attaquants incitent les utilisateurs à effectuer des opérations inattendues, leur permettant d'envoyer des requêtes malveillantes à leur insu. Pour prévenir de telles attaques, les développeurs peuvent prendre un certain nombre de mesures pour protéger leurs sites. Cet article explique comment gérer les attaques CSRF en PHP.

  1. Comprendre les principes des attaques CSRF :
    Avant de commencer à traiter les attaques CSRF, nous devons d'abord comprendre les principes de l'attaque. Une attaque CSRF est réalisée en exploitant les informations d'identification d'un utilisateur connecté sur d'autres sites Web pour effectuer des actions non autorisées. L'attaquant falsifiera une requête et l'enverra au site Web cible, qui sera exécuté en utilisant l'identité de l'utilisateur. Après avoir reçu la demande, le site Web croira à tort que la demande a été envoyée par l'utilisateur lui-même. Par conséquent, comprendre ce principe est crucial pour se défendre efficacement contre les attaques CSRF.
  2. Utiliser la vérification des jetons :
    La vérification des jetons est un moyen courant de se défendre contre les attaques CSRF. Il repose sur la génération d'un identifiant unique (Token) pour chaque utilisateur et l'intégration de ce Token dans le formulaire. Lorsque l'utilisateur soumet le formulaire, le serveur vérifiera si le jeton du formulaire est cohérent avec le jeton de la session de l'utilisateur. Si elle est incohérente, cela signifie qu'il s'agit d'une requête malveillante et le serveur refusera de l'exécuter.

Ce qui suit est un exemple de code utilisant la vérification du jeton :

// 生成Token
$token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $token;

// 将Token嵌入到表单中
<form method="post" action="process.php">
    <input type="hidden" name="csrf_token" value="<?php echo $token; ?>">
    <!-- other form fields -->
    <input type="submit" value="Submit">
</form>

// 在处理请求时验证Token
session_start();
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die("Invalid CSRF token");
}
// 处理请求
  1. Restrict HTTP Referer :
    HTTP Referer est un en-tête de requête HTTP , qui contient l'URL de la page d'où provient la demande. Nous pouvons utiliser ce champ d'en-tête pour vérifier si la demande provient du même nom de domaine. Lors de la validation d'une demande, nous pouvons vérifier si le Referer demandé est le même que le nom de domaine actuel. Si c'est différent, il s'agit probablement d'une requête malveillante. Cependant, il convient de noter que Referer peut être désactivé ou falsifié par certains navigateurs ou serveurs proxy, cette méthode ne garantit donc pas une sécurité totale.

Ce qui suit est un exemple de code pour limiter le référent HTTP :

$referer = $_SERVER['HTTP_REFERER'];
$allowed_referer = 'https://www.example.com';

if (strpos($referer, $allowed_referer) !== 0) {
    die("Invalid Referer");
}
// 处理请求
  1. Définissez l'attribut SameSite Cookie :
    En PHP 7.3 et ci-dessus, vous pouvez définir l'attribut SameSite sur le cookie. L'attribut SameSite peut définir que les cookies ne peuvent être utilisés que sur le même site, empêchant ainsi efficacement les attaques CSRF. Vous pouvez définir l'attribut SameSite du cookie sur « Strict » ou « Lax ». « Strict » signifie que les cookies ne peuvent être utilisés que par le même site, tandis que « Lax » signifie que les cookies sont autorisés dans certaines situations intersites, mais pas dans les requêtes POST.

Ce qui suit est un exemple de code pour définir l'attribut SameSite Cookie :

session_start();
session_set_cookie_params([
    'httponly' => true,
    'samesite' => 'Lax'
]);

Conclusion :
La gestion des attaques CSRF en PHP nécessite une série de mesures de sécurité mesures mesure. L'utilisation de la vérification des jetons, la limitation du référent HTTP et la définition des attributs des cookies SameSite sont autant de moyens efficaces de se défendre contre les attaques CSRF. Bien que ces méthodes puissent améliorer la sécurité du site Web, les développeurs doivent toujours prêter une attention particulière aux nouvelles menaces de sécurité et aux meilleures pratiques et mettre à jour les mesures de protection en temps opportun pour garantir la sécurité du site Web.

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