Heim  >  Artikel  >  Backend-Entwicklung  >  PHP Framework-Sicherheitsleitfaden: Wie verhindert man CSRF-Angriffe?

PHP Framework-Sicherheitsleitfaden: Wie verhindert man CSRF-Angriffe?

WBOY
WBOYOriginal
2024-06-01 10:36:57353Durchsuche

PHP 框架安全指南:如何防止 CSRF 攻击?

PHP Framework-Sicherheitsleitfaden: Wie verhindert man CSRF-Angriffe?

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.

Wie funktioniert CSRF?

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.

Wie verhindert man CSRF-Angriffe?

1. Verwenden Sie Anti-CSRF-Token:

  • Weisen Sie jedem Benutzer ein eindeutiges Token zu und speichern Sie es in der Sitzung oder im Cookie.
  • Fügen Sie in der App ein verstecktes Feld zum Senden dieses Tokens ein.
  • Stellen Sie sicher, dass der übermittelte Token mit dem gespeicherten Token übereinstimmt.
// 生成令牌并存储在会话中
$_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:

  • Wenn die Seite zum ersten Mal geladen wird, generieren Sie ein Token und speichern Sie es in Cookie.
  • Beim Absenden des Formulars senden Sie das Token als HTTP-Header an den Server.
  • Stellen Sie sicher, dass der übermittelte Token mit dem gespeicherten Token übereinstimmt.
// 在首次加载页面时生成令牌并存储在 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']) {
    // 令牌无效,拒绝请求
}

Praxisbeispiel

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn