Maison >développement back-end >tutoriel php >Comment utiliser les formulaires PHP pour empêcher les attaques CSRF
Avec le développement continu de la technologie réseau, les problèmes de sécurité deviennent de plus en plus un problème incontournable dans le développement d'applications réseau. Parmi elles, l'attaque CSRF (cross-site request forgery) est une méthode d'attaque courante. Son objectif principal est d'utiliser l'utilisateur pour lancer une requête illégale en arrière-plan en permettant à l'utilisateur de lancer une requête malveillante dans le navigateur. est connecté au site Web. Cela entraîne des vulnérabilités de sécurité côté serveur. Dans les applications PHP, l'utilisation de la validation de formulaire est un moyen efficace de prévenir les attaques CSRF.
Les attaques CSRF utilisent principalement l'identité des utilisateurs connectés pour mener des attaques à distance. , Le moyen de protection le plus direct consiste à ajouter des valeurs non conventionnelles aux données de page et aux formulaires, et à limiter l'envoi de chaque demande de formulaire à une seule fois. Ces valeurs sont des jetons CSRF, qui sont utilisés pour vérifier si les informations d'identité lors de la soumission du formulaire sont légales. Lors du traitement de la soumission du formulaire en arrière-plan, le jeton doit être vérifié Ce n'est que lorsqu'il correspond au jeton prédéfini que la demande peut continuer à être traitée.
Un exemple de code est le suivant :
// 生成Token值,通常可以在session中设置 session_start(); $token = md5(uniqid(mt_rand(), true)); $_SESSION['csrf_token'] = $token; // 应用到表单中 <input type="hidden" name="csrf_token" value="<?=$_SESSION['csrf_token']?>"/>
Pour la soumission du formulaire, la vérification du jeton est requise avant le traitement des données, comme suit :
// 获取表单提交的Token $submittedToken = $_POST['csrf_token']; // 验证Token是否合法 if (!isset($_SESSION['csrf_token']) || $submittedToken !== $_SESSION['csrf_token']) { die('Token validation failed, request denied'); }
Dans le code ci-dessus, nous utilisons le mécanisme de session de PHP pour générer une valeur de jeton aléatoire non dupliquée et la stocker dans la session. Dans le formulaire, nous devons transmettre la valeur du jeton en tant que champ dans le champ masqué en arrière-plan afin qu'elle puisse être envoyée au serveur lors de la soumission du formulaire. Côté serveur, nous devons vérifier la valeur du jeton demandée. Si le jeton soumis est incohérent avec le jeton prédéfini, la demande doit être rejetée.
La stratégie de référence est un en-tête HTTP utilisé pour contrôler si le navigateur l'inclut lors de l'envoi de requêtes à des tiers Champ de référence des sites. Si nous rejetons directement les demandes de champs de référence illégaux lors du traitement du formulaire, nous pouvons nous défendre efficacement contre les attaques CSRF.
En PHP, nous pouvons utiliser le code suivant pour définir l'en-tête de la politique de référence :
header('Referrer-Policy: no-referrer');
Le code ci-dessus indique au navigateur de ne pas inclure les informations d'en-tête de référence lors de l'envoi d'une requête . De cette façon, même si un attaquant tente de mener une attaque CSRF en falsifiant l’en-tête Referrer, celui-ci sera rejeté par le navigateur et la requête ne sera pas envoyée au serveur.
En plus d'ajouter un jeton CSRF au formulaire, nous pouvons également ajouter une vérification Des méthodes d'authentification supplémentaires telles que des codes ou des mots de passe peuvent améliorer la sécurité du formulaire et empêcher les attaques CSRF. Bien que cette méthode soit relativement lourde, elle est très efficace car quelle que soit la manière dont l'attaquant tente de tromper le serveur, il doit passer par des liens d'authentification supplémentaires, ce qui rend l'attaque plus difficile.
Les attaques CSRF sont principalement lancées via des requêtes GET, nous essayons donc d'éviter d'utiliser le GET sous la forme Soumettre les données. Si la méthode GET doit être utilisée, nous devons ajouter une valeur Token ou une autre méthode d'authentification au formulaire pour améliorer la sécurité du formulaire.
En bref, prévenir les attaques CSRF est un problème auquel il faut prêter attention dans le développement d'applications PHP. En utilisant rationnellement divers mécanismes de sécurité tels que la valeur du jeton, l'en-tête de la politique de référence et le code de vérification, nous pouvons protéger efficacement les applications contre la menace d'attaques CSRF. Dans le même temps, nous devons continuer à prêter attention aux derniers problèmes de sécurité des réseaux et méthodes d’attaque, et mettre à jour et améliorer rapidement nos mesures de sécurité.
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!