Maison >développement back-end >tutoriel php >Combattez et transformez la défaite en victoire : conseils de contre-attaque pour la prévention de la falsification de requêtes intersites PHP (CSRF)

Combattez et transformez la défaite en victoire : conseils de contre-attaque pour la prévention de la falsification de requêtes intersites PHP (CSRF)

PHPz
PHPzavant
2024-02-25 16:07:201204parcourir

L'éditeur PHP Strawberry révèle le secret pour empêcher la falsification de requêtes intersites PHP (CSRF). Les attaques CSRF constituent une menace courante pour la sécurité des réseaux, mais grâce à quelques mesures préventives simples et efficaces, nous pouvons transformer la défaite en victoire et protéger la sécurité des sites Web et des utilisateurs. Cet article présentera les principes et les inconvénients des attaques CSRF, ainsi que la manière d'utiliser la vérification des jetons, le cookie SameSite et d'autres technologies pour prévenir efficacement de telles attaques et rendre votre site Web plus sécurisé et fiable.

Un jeton CSRF est une chaîne aléatoire utilisée pour vérifier qu'une demande provient d'une source légitime. Vous pouvez implémenter la protection CSRF en stockant un jeton CSRF dans la session de l'utilisateur et en incluant le jeton à chaque demande. Lorsque le serveur reçoit une requête, il compare le jeton de la requête avec le jeton stocké dans la session. S'il n'y a pas de correspondance, le serveur rejette la demande.

<?PHP
// 生成 CSRF 令牌
$csrfToken = bin2hex(random_bytes(32));

// 将 CSRF 令牌存储在用户的会话中
$_SESSioN["csrfToken"] = $csrfToken;

// 将 CSRF 令牌包含在每个请求中
<fORM action="submit.php" method="post">
<input type="hidden" name="csrfToken" value="<?php echo $csrfToken; ?>">
<input type="submit" value="Submit">
</form>

Vérifier la source de la demande

Vous pouvez empêcher les attaques CSRF en vérifiant l'origine de la demande. Vous pouvez le faire en vérifiant l'en-tête Http Origin de la requête. Si l’en-tête Origin de la demande n’est pas l’URL de votre application, vous devez refuser la demande.

<?php
// 检查请求的 HTTP 来源头
$referer = $_SERVER["HTTP_REFERER"];
if (strpos($referer, "https://example.com") !== 0) {
// 请求不是来自您的应用程序
header("HTTP/1.1 403 Forbidden");
exit;
}

Utilisez les en-têtes de sécurité

Vous pouvez empêcher les attaques CSRF en utilisant l'en-tête Security. Les en-têtes de sécurité indiquent au navigateur comment se comporter pour empêcher les attaques CSRF. Vous pouvez utiliser les en-têtes de sécurité suivants :

  • Content-Security-Policy : Cet en-tête peut limiter les ressources que le navigateur peut charger.
  • X-Frame-Options : Cet en-tête empêche le chargement de votre application sur un autre site Web.
  • X-XSS-Protection : Cet en-tête peut aider à prévenir les attaques de script intersite (XSS).
<?php
// 设置安全标头
header("Content-Security-Policy: default-src "self";");
header("X-Frame-Options: SAMEORIGIN");
header("X-XSS-Protection: 1; mode=block");

Limiter le périmètre des opérations sensibles

Vous pouvez empêcher les attaques CSRF en limitant la portée des opérations sensibles. Vous pouvez le faire en limitant les actions sensibles aux pages auxquelles seuls les utilisateurs authentifiés peuvent accéder. Vous pouvez également y parvenir en demandant aux utilisateurs de saisir un mot de passe avant d'effectuer des actions sensibles.

<?php
// 将敏感操作限制在经过身份验证的用户才能访问的页面
if (!isset($_SESSION["authenticated"])) {
// 用户未经身份验证
header("HTTP/1.1 403 Forbidden");
exit;
}

// 要求用户在执行敏感操作之前输入密码
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!isset($_POST["passWord"]) || $_POST["password"] != "secret") {
// 密码不正确
header("HTTP/1.1 403 Forbidden");
exit;
}
}

Conclusion

En utilisant les techniques ci-dessus, vous pouvez empêcher les attaques CSRF et protéger vos applications PHP.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer