ホームページ > バックエンド開発 > PHPの問題 > PHP CSRF保護:CSRF攻撃を防ぐ方法。

PHP CSRF保護:CSRF攻撃を防ぐ方法。

James Robert Taylor
リリース: 2025-03-25 15:05:46
オリジナル
833 人が閲覧しました

PHP CSRF保護:CSRF攻撃を防ぐ方法

クロスサイトリクエストフォーファリー(CSRF)攻撃は、ユーザーがそれらを信頼するWebアプリケーションで意図しないアクションを実行するようにトリックするため、特に危険です。 PHPでのCSRF攻撃を防ぐために、これらの戦略に従うことができます。

  1. CSRFトークンを使用してください:ユーザーセッションごとに一意のトークンを生成し、状態を変える操作をトリガーするあらゆる形式にこのトークンを含めます。トークンは、リクエストを処理する前にサーバーで確認する必要があります。
  2. 同じサイトCookie :CookieにSameSite属性を使用します。 SameSite StrictまたはLaxに設定すると、クロスオリジンリクエストでCookieが送信されないようにすることにより、CSRFを防ぐのに役立ちます。
  3. ダブルサブリットCookie :この方法では、Cookieとリクエストパラメーターの両方でCSRFトークンを送信します。次に、サーバーはトークン値が一致することを確認します。
  4. 参照ヘッダーの確認:絶対確実ではありませんが、参照ヘッダーをチェックすると、追加の保護層が提供される可能性があります。リクエストがあなた自身のドメインから来ることを確認してください。
  5. Get for State-changing操作を使用しないでください:Get Requestは他のサイトから簡単にトリガーできるため、サーバー状態を変更する操作に投稿を使用します。
  6. 適切なセッション管理を実装する:セッションが適切に管理され、 HttpOnlySecureなどの適切なセキュリティフラグを使用してCookieが設定されていることを確認します。

これらの測定を実装することにより、PHPアプリケーションに対するCSRF攻撃のリスクを大幅に減らすことができます。

PHPでCSRFトークンを実装するためのベストプラクティスは何ですか?

PHPでCSRFトークンを効果的に実装するには、いくつかのベストプラクティスが含まれます。

  1. 一意のトークンを生成する:暗号化された安全な方法を使用してトークンを生成します。 PHPのrandom_bytesbin2hex関数を使用して、安全なトークンを作成できます。

     <code class="php">$token = bin2hex(random_bytes(32));</code>
    ログイン後にコピー
  2. トークンを安全に保管する:トークンをユーザーのセッションまたはクッキーとして保存します。セッションを使用する場合は、セッション固定攻撃が防止されていることを確認してください。

     <code class="php">session_start(); $_SESSION['csrf_token'] = $token;</code>
    ログイン後にコピー
  3. フォームにトークンを含める:隠された入力フィールドとしてフォームにトークンを埋め込みます。

     <code class="php"><input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($token); ?>"></code>
    ログイン後にコピー
  4. 提出時にトークンを検証します:保存された値に対してフォーム提出時にトークンを確認します。
  5. トークンの再生:フォームの提出が成功した後、または一定期間後にトークンを再生して攻撃ウィンドウを減らすことを検討してください。
  6. すべての状態変更リクエストでトークンを使用する:従来のフォームの送信だけでなく、Ajax呼び出しも、サーバー状態を変更するすべてのリクエストにCSRFトークンを含めます。
  7. 予測可能なトークンを避けてください:攻撃者がトークンが予測可能または推測可能でないことを確認してください。

これらのプラクティスに従うことで、CSRF保護メカニズムの完全性を維持するのに役立ちます。

CSRF保護のためにPHPライブラリをお勧めしますか?

いくつかのPHPライブラリは、CSRF保護の実装を簡素化できます。

  1. OWASP CSRFGUARD PHP :CSRF保護のために特別に設計されたOpen Web Application Security Project(OWASP)のライブラリ。トークンの生成、検証、およびさまざまなフレームワークとの統合のための堅牢なメカニズムを提供します。
  2. Symfony Security :Symfony Frameworkを使用している場合、CSRF保護が組み込まれています。 CsrfExtensionおよびCsrfTokenManagerクラスは、CSRFトークンを生成および検証するための包括的なサポートを提供します。
  3. Laravel :LaravelのCSRF保護は、実装するのに簡単です。このフレームワークは、アクティブユーザーセッションごとにCSRFトークンを自動的に生成し、 @csrfブレードディレクティブを介してフォームに含まれています。
  4. Zend Framework :Zend FrameworkはZend\Validator\Csrfコンポーネントを介してCSRF保護を提供します。これは、フォームに簡単に統合できます。
  5. Aura.Web :PHPプロジェクトでの使用に適したCSRFトークンの生成と検証を提供する軽量ライブラリ。

これらのライブラリのいずれかを使用すると、開発時間を節約し、アプリケーションで堅牢なCSRF保護を確保できます。

PHPのフォーム送信でCSRFトークンを検証するにはどうすればよいですか?

PHPのフォーム提出でのCSRFトークンの検証には、フォームで送信されたトークンをセッションまたはCookieに保存されているトークンと比較することが含まれます。これが段階的なガイドです:

  1. 保存されたトークンを取得します:セッションまたはCookieに保存されているトークンにアクセスします。

     <code class="php">session_start(); $storedToken = $_SESSION['csrf_token'];</code>
    ログイン後にコピー
  2. 提出されたトークンを取得:フォームの提出で送信されたトークンを取得します。

     <code class="php">$submittedToken = $_POST['csrf_token'];</code>
    ログイン後にコピー
  3. トークンの検証:保存されたトークンと提出されたトークンを比較します。

     <code class="php">if (!hash_equals($storedToken, $submittedToken)) { // Token mismatch, handle the error http_response_code(403); die("CSRF token validation failed"); }</code>
    ログイン後にコピー
  4. リクエストを続行します。トークンが一致する場合は、フォームデータの処理を進めます。

     <code class="php">// Tokens match, proceed with the form submission // Process the form data here</code>
    ログイン後にコピー
  5. トークンを再生します:オプションで、セキュリティを強化するための提出が成功した後、トークンを再生します。

     <code class="php">$newToken = bin2hex(random_bytes(32)); $_SESSION['csrf_token'] = $newToken;</code>
    ログイン後にコピー

これらの手順に従うことにより、CSRFトークンが適切に検証され、CSRF攻撃からアプリケーションを保護することができます。

以上がPHP CSRF保護:CSRF攻撃を防ぐ方法。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート