Maison > Article > développement back-end > Anticiper les risques et agir de manière préventive : une stratégie pionnière pour empêcher la falsification de requêtes intersites PHP (CSRF)
L'article "Anticipate Risks and Pre-emptively Strike: PHP Cross-Site Request Forgery (CSRF) Pioneer Strategies" écrit par l'éditeur PHP Xin Yi explore en profondeur la menace des attaques CSRF pour la sécurité des sites Web et propose une série de stratégies de prévention pour aider les développeurs. Protéger efficacement contre de telles attaques. Grâce à un langage concis et clair, l'article fournit aux lecteurs un guide pratique de prévention en matière de sécurité, leur permettant de mieux protéger la sécurité du site Web et des utilisateurs pendant le processus de développement.
1. Attaque CSRF de soumission de formulaire
Ce type d'attaque fonctionne en incitant la victime à cliquer sur un faux lien ou un faux bouton, ce qui amène le navigateur de la victime à envoyer une requête POST au site Web de l'attaquant, exécutant ainsi les actions prévues par l'attaquant.
2. GET demande d'attaque CSRF
Les attaques CSRF de requête GET fonctionnent en incitant la victime à cliquer sur un lien ou une image falsifiée, ce qui amène le navigateur de la victime à envoyer une requête GET au site Web de l'attaquant, exécutant ainsi les actions prévues par l'attaquant.
3. Attaque CSRF de demande JSON
Les attaquesJSONRequest CSRF fonctionnent en incitant la victime à cliquer sur un faux lien ou un faux bouton, ce qui amène le navigateur de la victime à envoyer une requête jsON au site Web de l'attaquant, exécutant ainsi les actions prévues par l'attaquant.
4. AJAX demande une attaque CSRF
ajaxLes attaques CSRF par requête fonctionnent en incitant la victime à cliquer sur un faux lien ou un faux bouton, ce qui amène le navigateur de la victime à envoyer une requête AJAX au site Web de l'attaquant, exécutant ainsi les actions prévues par l'attaquant.
Stratégies pionnières pour prévenir les attaques CSRF
1. Utilisez le jeton CSRF
Le jeton CSRF est une chaîne aléatoire générée côté serveur et stockée dans un cookie côté client. Lors de l'envoi d'une requête, le client envoie le jeton CSRF au serveur dans le cadre de l'en-tête de requête Http. Le serveur vérifie si le jeton CSRF est valide et, s'il est valide, effectue l'opération demandée s'il n'est pas valide, rejette la demande ;
Exemple de code :
<?PHP // 生成CSRF令牌 $csrfToken = bin2hex(random_bytes(32)); // 在Cookie中存储CSRF令牌 setcookie("csrf_token", $csrfToken, time() + 3600, "/"); // 检查CSRF令牌是否有效 if ($_SERVER["REQUEST_METHOD"] === "POST") { if (!isset($_POST["csrf_token"]) || $_POST["csrf_token"] !== $_COOKIE["csrf_token"]) { die("Invalid CSRF token"); } } // 执行请求的操作 ... ?>
2. Utilisez l'attribut SameSite
L'attribut SameSite empêche les navigateurs d'envoyer des cookies dans les requêtes intersites. Il peut être défini sur l'une des trois valeurs suivantes :
Exemple de code :
<fORM action="submit.php" method="post"> <input type="hidden" name="csrf_token" value="<?php echo $csrfToken; ?>"> <input type="submit" value="Submit"> </form>
<?php // 检查SameSite属性是否有效 if ($_SERVER["REQUEST_METHOD"] === "POST") { if (!isset($_POST["csrf_token"]) || $_POST["csrf_token"] !== $_COOKIE["csrf_token"]) { die("Invalid CSRF token"); } } // 执行请求的操作 ... ?>
3. Utilisez l'en-tête Content-Security-Policy (CSP)
L'en-tête CSP empêche le navigateur de charger des ressources provenant de sites Web tiers. Il peut être configuré pour autoriser ou bloquer certains types de ressources, tels que les scripts, les feuilles de style et les images.
Exemple de code :
<meta http-equiv="Content-Security-Policy" content="default-src "self"; script-src "self" "https://example.com"; style-src "self" "https://example.com"; img-src "self" "https://example.com";">
4. Utilisez l'en-tête CORS (Cross-Origin Resource Sharing)
L'en-tête CORS permet aux navigateurs d'envoyer des requêtes inter-domaines à d'autres domaines. Il peut être configuré pour autoriser ou refuser certains types de requêtes, telles que GET, POST, PUT et DELETE.
Exemple de code :
<meta http-equiv="Access-Control-Allow-Origin" content="https://example.com"> <meta http-equiv="Access-Control-Allow-Methods" content="GET, POST, PUT, DELETE">
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!