Maison > Article > développement back-end > Premiers pas avec PHP : falsification de requêtes intersites (CSRF)
PHP est un langage de script open source largement utilisé dans le développement Web. Cependant, avec le nombre croissant de cybercriminalités, la sécurité est devenue l'une des considérations importantes dans la conception d'applications Web. Les attaques de falsification de requêtes intersites (CSRF) sont l'une des vulnérabilités courantes en matière de sécurité réseau. Cet article vise à fournir un guide d'introduction CSRF pour les débutants PHP.
L'attaque CSRF est une attaque qui exploite la relation de confiance existant dans le navigateur pour forger les requêtes des utilisateurs. Cette attaque se produit généralement lorsqu'un utilisateur visite un site Web malveillant ou non autorisé. L'attaquant insérera de faux formulaires HTML dans le site Web malveillant et définira l'adresse d'opération du formulaire sur un site Web approuvé par la victime. Lorsqu'un utilisateur est amené à soumettre un formulaire, son navigateur envoie automatiquement une requête contenant le cookie de la victime à un site Web de confiance, déclenchant ainsi l'attaque. Les attaquants peuvent ainsi effectuer de nombreuses actions malveillantes, telles que publier du spam, modifier les mots de passe des utilisateurs ou ajouter des utilisateurs à une liste noire à leur insu.
En PHP, la meilleure pratique pour prévenir les attaques CSRF est d'utiliser le mécanisme de vérification des jetons. Ce mécanisme permet aux applications de générer une valeur de jeton aléatoire unique, de l'intégrer dans chaque formulaire HTML et de valider la valeur lors de la soumission du formulaire. Lorsqu'une valeur de jeton expirée est soumise, l'application doit rejeter la demande et inviter l'utilisateur à se réauthentifier.
Ce qui suit est un exemple de code PHP de base montrant comment implémenter le mécanisme de vérification de jeton pour empêcher les attaques CSRF :
<?php // 生成token值 $token = md5(uniqid(mt_rand(), true)); // 将token存储到SESSION变量中 $_SESSION['csrf_token'] = $token; // 将token值嵌入到HTML表单中 echo '<form action="process_form.php" method="POST">'; echo '<label for="username">Username:</label>'; echo '<input type="text" id="username" name="username">'; echo '<label for="password">Password:</label>'; echo '<input type="password" id="password" name="password">'; echo '<input type="hidden" name="csrf_token" value="' . $token . '">'; echo '<input type="submit" value="Submit">'; echo '</form>'; // 处理表单数据并验证token值 if(isset($_POST['username']) && isset($_POST['password'])) { // 验证token值 if($_POST['csrf_token'] == $_SESSION['csrf_token']) { // 处理表单数据 $username = $_POST['username']; $password = $_POST['password']; // ... } else { echo 'Invalid token value. Please try again.'; } } ?>
Dans l'implémentation du code, générez d'abord une valeur de jeton aléatoire via la fonction md5(uniqid(mt_rand(), true))
, stockez-la dans la variable SESSION, et Il est intégré au formulaire HTML. Lorsque les données du formulaire sont soumises, l'application vérifie que la valeur du jeton dans la requête POST correspond à la valeur du jeton dans la SESSION. S'il y a une correspondance, la soumission des données du formulaire est autorisée, sinon la demande est refusée et l'utilisateur est invité à se réauthentifier.
Bien sûr, dans les applications réelles, il existe d'autres techniques de défense CSRF, comme l'utilisation de signatures numériques pour vérifier chaque demande de formulaire. Cependant, le mécanisme de vérification des jetons ci-dessus est une méthode simple et efficace et mérite d'être recommandé dans le développement PHP.
En bref, les attaques CSRF constituent une vulnérabilité de sécurité réseau courante et dangereuse. Les concepteurs d'applications PHP doivent suivre les meilleures pratiques pour garantir que leurs applications sont protégées contre ce type d'attaque. Une méthode simple mais efficace consiste à utiliser un mécanisme de vérification de jeton pour garantir que chaque demande de formulaire est initiée par un utilisateur de confiance.
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!