Ein Cross-Site-Request-Forgery-Angriff (CSRF) ist eine Art Netzwerkangriff, bei dem ein Angreifer einen Benutzer dazu verleitet, unbeabsichtigte Aktionen innerhalb der Webanwendung des Opfers auszuführen.
CSRF-Angriffe machen sich die Tatsache zunutze, dass die meisten Webanwendungen das Senden von Anfragen zwischen verschiedenen Seiten innerhalb desselben Domainnamens ermöglichen. Der Angreifer erstellt eine bösartige Seite, die Anfragen an die Anwendung des Opfers sendet und so nicht autorisierte Aktionen auslöst.
1. Verwenden Sie Anti-CSRF-Token:
// 生成令牌并存储在会话中 $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); // 在表单中包含隐藏字段 <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>"> // 验证提交的令牌 if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) { // 令牌无效,拒绝请求 }
2. Verwenden Sie das Synchronizer-Token-Muster:
// 在首次加载页面时生成令牌并存储在 Cookie 中 setcookie('csrf_token', bin2hex(random_bytes(32)), time() + 3600, '/'); // 在表单提交时,将令牌作为 HTTP 头发送 $headers = getallheaders(); $csrf_token = $headers['X-CSRF-Token']; // 验证提交的令牌 if (!isset($csrf_token) || $csrf_token !== $_COOKIE['csrf_token']) { // 令牌无效,拒绝请求 }
Zum Beispiel das Blockieren von CSRF-Angriffen auf Geldtransfers in Wallets:
// 在用户加载转账页面时生成令牌 $transfer_token = bin2hex(random_bytes(32)); // 在表单中包含隐藏字段 <input type="hidden" name="transfer_token" value="<?php echo $transfer_token; ?>"> // 验证提交的令牌 if (!isset($_POST['transfer_token']) || $_POST['transfer_token'] !== $transfer_token) { // 令牌无效,拒绝转账请求 }
Durch die Umsetzung dieser Maßnahmen können Sie CSRF-Angriffe effektiv verhindern und Ihre PHP-Anwendungen schützen.
Das obige ist der detaillierte Inhalt vonPHP Framework-Sicherheitsleitfaden: Wie verhindert man CSRF-Angriffe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!