Maison  >  Article  >  développement back-end  >  Comment définir un référent HTTP sous forme PHP pour empêcher la falsification de requêtes intersites

Comment définir un référent HTTP sous forme PHP pour empêcher la falsification de requêtes intersites

WBOY
WBOYoriginal
2023-06-25 19:23:051843parcourir

Le développement rapide d'Internet et les besoins de plus en plus complexes des utilisateurs ont rendu les exigences et les fonctions des applications Web de plus en plus complexes et diversifiées. Cependant, cela a également conduit à des problèmes de sécurité Web de plus en plus importants. L’une des méthodes d’attaque courantes est l’attaque CSRF (Cross-Site Request Forgery).

En termes simples, une attaque CSRF signifie qu'un attaquant utilise l'authentification de l'identité d'un utilisateur légitime sur un certain site pour usurper l'identité de l'utilisateur et utiliser le nom de l'utilisateur sans l'autorisation ou la connaissance de l'utilisateur. pour réaliser certaines opérations. Il existe de nombreuses méthodes d'attaque courantes, telles que l'envoi de requêtes malveillantes via des URL, des iframes, des images, etc. La définition d'un référent HTTP dans le formulaire PHP est un moyen efficace de prévenir les attaques CSRF.

Alors, comment définir le HTTP Referer sous forme PHP ?

HTTP Referer signifie qu'avant d'envoyer une requête, le navigateur vérifiera l'adresse source de la page actuelle, c'est-à-dire la source de la requête. Une demande est considérée comme légitime si la source de la demande est la même que l'adresse source dans la demande reçue par le serveur. Par conséquent, en définissant HTTP Referer, vous pouvez ajouter une couche de protection au formulaire et limiter l'adresse source de soumission du formulaire, empêchant ainsi efficacement les attaques CSRF.

Le processus de configuration spécifique est le suivant :

1 Ajoutez le code suivant à la page du formulaire :

<?php 
session_start();
$token = md5(uniqid(rand(), TRUE)); 
$_SESSION['csrf_token'] = $token;
?>
<form action="" method="post">
    <input type="hidden" name="csrf_token" value="<?php echo $token; ?>">
    //其他表单元素
    <input type="submit" value="提交">
</form>

Tout d'abord, ouvrez la session dans la page de formulaire, puis générez un jeton aléatoire en tant que jeton CSRF et stockez-le dans la session. Attribuez le jeton à un élément masqué et soumettez-le au serveur avec le formulaire dans le cadre de l'élément de formulaire.

2. Ensuite, ajoutez le code suivant à la page de traitement du formulaire :

session_start();
if($_POST['csrf_token'] != $_SESSION['csrf_token']) {
    //不合法的请求
    exit("非法请求!");
}
//处理表单数据之前。...

Dans la page de traitement du formulaire, ouvrez d'abord la session, puis stockez le csrf_token dans le formulaire. avec le précédent Comparez le jeton de session. Si les jetons sont incohérents, la soumission est considérée comme illégale et le gestionnaire est terminé. Sinon, les données du formulaire peuvent être traitées normalement.

En résumé, définir un référent HTTP dans un formulaire PHP n'est pas difficile. Il vous suffit de générer un jeton CSRF aléatoire dans la page du formulaire, de l'enregistrer dans la session, puis de l'utiliser dans le traitement du formulaire. page Comparez simplement le jeton du formulaire avec le jeton de la session. Cela peut efficacement éviter les attaques de falsification de requêtes intersites.

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