Maison >développement back-end >tutoriel php >Comment puis-je empêcher les attaques CSRF (Cross-Site Request Forgery) en PHP ?

Comment puis-je empêcher les attaques CSRF (Cross-Site Request Forgery) en PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-02 16:37:11646parcourir

How Can I Prevent Cross-Site Request Forgery (CSRF) Attacks in PHP?

Prévenir le CSRF en PHP

La falsification de requêtes intersites (CSRF) est un type d'attaque dans lequel un site Web malveillant envoie une demande à un site Web légitime au nom de un utilisateur authentifié. Cela peut permettre à l'attaquant d'exécuter des actions que l'utilisateur n'avait pas prévu, comme changer son mot de passe ou effectuer des achats frauduleux.

Atténuation des attaques CSRF

Il existe plusieurs techniques qui peuvent être utilisées pour empêcher Attaques CSRF en PHP, notamment :

1. Exiger une authentification dans les paramètres GET et POST, pas seulement dans les cookies

Cette mesure limite la capacité des sites Web malveillants à envoyer des requêtes au nom d'utilisateurs authentifiés en exigeant qu'un jeton d'authentification valide soit présent à la fois dans le GET et Paramètres POST d'une requête.

2. Vérification de l'en-tête HTTP Referer

L'en-tête HTTP Referer contient l'URL de la page qui fait référence à la page actuelle. En vérifiant l'en-tête Referer, il est possible de détecter si une requête provient d'une source légitime ou d'un site web malveillant.

Implémentation dans Kohana PHP Framework

Validation de GET et POST Paramètres

Dans Kohana, vous pouvez utiliser la règle Valid::not_empty() pour valider les paramètres GET et POST pour assurez-vous qu’ils ne sont pas vides. Par exemple :

$rules = array(
    'get_param' => array(
        array('not_empty')
    ),
    'post_param' => array(
        array('not_empty')
    )
);
$validation = Validation::factory($request->query() + $request->post())
    ->rules($rules);
if (!$validation->check()) {
    // CSRF attack detected
}

Vérification de l'en-tête du référent HTTP

Dans Kohana, vous pouvez utiliser la méthode Request::referrer() pour obtenir l'URL du référent page. Pour vérifier si l'en-tête Referer est valide, vous pouvez le comparer à la valeur attendue :

$referrer = $request->referrer();
if ($referrer !== $expected_referrer) {
    // CSRF attack detected
}

Utiliser un jeton unique

Le moyen le plus efficace de empêcher les attaques CSRF consiste à utiliser un jeton unique. Ce jeton est généré sur le serveur et stocké dans la session. Lorsqu'un utilisateur soumet un formulaire, le jeton est inclus dans la demande. Le serveur vérifie ensuite le jeton et, s'il est valide, complète la demande.

Pour implémenter un jeton unique dans Kohana, vous pouvez suivre les étapes suivantes :

  1. Générer un jeton aléatoire et stockez-le dans la session.
  2. Incluez le jeton dans le formulaire soumis par l'utilisateur.
  3. Vérifiez le jeton côté serveur avant de compléter la demande.

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