ホームページ  >  記事  >  バックエンド開発  >  PHP Framework セキュリティ ガイド: CSRF 攻撃を防ぐには?

PHP Framework セキュリティ ガイド: CSRF 攻撃を防ぐには?

WBOY
WBOYオリジナル
2024-06-01 10:36:57415ブラウズ

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

PHP フレームワーク セキュリティ ガイド: CSRF 攻撃を防ぐ方法?

クロスサイト リクエスト フォージェリ (CSRF) 攻撃は、攻撃者がユーザーをだまして被害者の Web アプリケーション内で意図しないアクションを実行させるネットワーク攻撃の一種です。

CSRF はどのように機能しますか?

CSRF 攻撃は、ほとんどの Web アプリケーションが同じドメイン名の異なるページ間でリクエストを送信できるという事実を悪用します。攻撃者は、被害者のアプリケーションにリクエストを送信する悪意のあるページを作成し、不正なアクションを引き起こします。

CSRF 攻撃を防ぐには?

1. CSRF 対策トークンを使用する:

  • 各ユーザーに一意のトークンを割り当て、セッションまたは Cookie に保存します。
  • このトークンを送信するための非表示フィールドをアプリに含めます。
  • 送信されたトークンが保存されたトークンと一致することを確認します。
// 生成令牌并存储在会话中
$_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. シンクロナイザー トークン パターンを使用します:

  • ページが初めて読み込まれるときに、トークンを生成して Cookie に保存します。
  • フォーム送信時に、トークンをHTTPヘッダーとしてサーバーに送信します。
  • 送信されたトークンが保存されたトークンと一致することを確認します。
// 在首次加载页面时生成令牌并存储在 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']) {
    // 令牌无效,拒绝请求
}

実際的なケース

たとえば、ウォレットでの資金移動に対するCSRF攻撃を防止します:

// 在用户加载转账页面时生成令牌
$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) {
    // 令牌无效,拒绝转账请求
}

これらの対策を実装することで、CSRF攻撃を効果的に防止し、PHPアプリケーションを保護できます。

以上がPHP Framework セキュリティ ガイド: CSRF 攻撃を防ぐには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。