検索
ホームページバックエンド開発PHP8PHP 8でクロスサイトリクエストフォーファリー(CSRF)から保護する方法は?

この記事では、シンクロナイザートークンを使用してPHP 8のCSRF保護を詳しく説明しています。トークンの生成、フォームに埋め込まれ、サーバー側の検証を説明しています。ベストプラクティス、一般的な脆弱性(不適切なトークンの取り扱いなど)、および増分インテグラ

PHP 8でクロスサイトリクエストフォーファリー(CSRF)から保護する方法は?

PHP 8でクロスサイトリクエストフォーファリー(CSRF)から保護する方法は?

PHP 8のクロスサイトリクエストフォーファリー(CSRF)から保護するには、堅牢なメカニズムを実装して、リクエストが悪意のあるサードパーティサイトからではなく、アプリケーションから発生することを確認することが含まれます。最も効果的な方法は、シンクロナイザートークンを使用することです。これには、ユーザーセッションごとに一意で予測不可能なトークンを生成し、サーバーに提出されたフォームに埋め込むことが含まれます。フォームの提出を受信すると、サーバーは、提出されたトークンがユーザーセッションに保存されているトークンと一致することを確認します。それらが一致しない場合、要求は潜在的に不正として拒否されます。

これをPHP 8で実装する方法は次のとおりです。

  1. トークン生成:暗号化されたランダムトークンを生成します。 PHPのrandom_bytes()関数はこれに最適です。 $_SESSIONを使用して、ユーザーのセッションにトークンを保存します。
  2. トークンをフォームに埋め込む:生成されたトークンにHTMLフォームに隠された入力フィールドを含めます。このフィールドには、 csrf_tokenという名前(または同様に説明的な名前)が必要です。
  3. トークン検証:サーバー側では、フォームの送信を処理するときに、提出されたフォーム( $_POST['csrf_token'] )とユーザーのセッション( $_SESSION['csrf_token'] )の両方からトークンを取得します。 2つを比較します。それらが同一である場合、リクエストはおそらく合法です。そうでない場合は、リクエストを拒否し、エラーメッセージを表示します。
 <code class="php"><?php session_start(); // Generate CSRF token on first page load if (!isset($_SESSION[&#39;csrf_token&#39;])) { $_SESSION[&#39;csrf_token&#39;] = bin2hex(random_bytes(32)); } // Example form echo "<form method=&#39;post&#39; action=&#39;process.php&#39;>"; echo "<input type="'hidden'" name="'csrf_token'" value="'{$_SESSION['csrf_token']}'">"; echo "<input type="'submit'" value="'Submit'">"; echo ""; // process.php session_start(); if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['csrf_token']) && $_POST['csrf_token'] === $_SESSION['csrf_token']) { // Process the form data - the request is likely legitimate // ... your code to handle the form submission ... unset($_SESSION['csrf_token']); // good practice to remove token after use } else { // Reject the request - CSRF attack detected die("CSRF attack detected!"); } } ?></code>

トークンの傍受を防ぐために、常にhttpsを使用することを忘れないでください。

PHP 8アプリケーションにCSRF保護を実装するためのベストプラクティスは何ですか?

シンクロナイザートークンを使用するだけでなく、いくつかのベストプラクティスがCSRF保護を強化します。

  • Double Submit Cookie: Hidden Formフィールドに加えて、クッキーにトークンを含めます。これにより、別の保護層が追加され、隠されたフィールドが操作される可能性のある脆弱性を軽減します。サーバーは、CookieとHidden Field値の両方を比較する必要があります。
  • 定期的なトークン再生: CSRFトークンを定期的に(たとえば、各フォームの提出後)、侵害されたトークンの影響を制限します。
  • HTTPのみのCookie: CSRF Coo​​kieのHttpOnlyフラグを設定します。これにより、クライアント側のJavaScriptがCookieにアクセスすることを防ぎ、攻撃者がトークンを盗むのが難しくなります。
  • セキュアクッキー: CSRF Coo​​kieのSecureフラグを使用して、HTTPSにのみ送信されるようにします。
  • 入力の消毒と検証: CSRF保護メカニズムに直接関与していなくても、すべてのユーザー入力を消毒および検証します。これは、CSRF攻撃と併せて悪用される可能性のある他の脆弱性を防ぐのに役立ちます。
  • 定期的なセキュリティ監査:アプリケーションの定期的なセキュリティ監査を実施して、潜在的な弱点を特定して対処します。

PHP 8に、CSRF攻撃の影響を受けやすいままにする一般的な脆弱性はありますか?

PHP 8自体はCSRFに特につながる新しい脆弱性を導入していませんが、いくつかの一般的なコーディングプラクティスはアプリケーションを脆弱にすることができます。

  • CSRF保護の欠如:最も重要な脆弱性は、CSRF保護メカニズムがないことです。これにより、アプリケーションは攻撃に対して広く開かれます。
  • 不適切なトークン処理: CSRFトークンの生成、保存、または検証の誤っていると、保護が無効になる可能性があります。たとえば、予測可能または推測可能なトークンを使用したり、セッション管理を適切に処理したり、使用後にトークンを再生することを怠ったりします。
  • 脆弱なフレームワークまたはライブラリ:時代遅れまたは不安定なフレームワークまたはライブラリを使用すると、CSRF攻撃に関連して悪用される可能性のある脆弱性が導入されます。常にセキュリティパッチを使用して依存関係を最新の状態に保ちます。

CSRF保護を既存のPHP 8プロジェクトに最小限の破壊で統​​合するにはどうすればよいですか?

既存のプロジェクトにCSRF保護を統合することは、徐々に行うことができます。最初にハイリスクフォームに焦点を当てます(パスワードの変更、金融取引の作成、ユーザープロファイルの更新などの重要なアクションを実行するもの)。

  1. 脆弱なフォームを特定する:アプリケーションのフォームを確認して、CSRF保護が必要なものを特定します。
  2. トークンの生成と検証を実装します:最初の答えに示すように、トークンの生成と検証コードを特定したフォームに追加します。簡単な実装から始めて、ベストプラクティスで徐々に強化します。
  3. ライブラリを使用(オプション): CSRF保護機能を提供する適切に管理されたセキュリティライブラリを使用することを検討してください。これにより、実装が簡素化され、ベストプラクティスへの順守が確保されます。
  4. 徹底的にテスト:保護を統合した後、アプリケーションが正しく機能し、新しい問題が導入されないことを確認するために、アプリケーションを徹底的にテストします。ツールとテクニックを使用してCSRF攻撃をシミュレートして、実装の有効性を検証します。
  5. 段階的な展開:プロジェクトが大きい場合は、CSRF保護の段階的展開を検討して、混乱を最小限に抑えてください。フォームの小さなサブセットから始めて、アプリケーションの残りの部分に徐々に拡大します。このアプローチにより、デバッグを容易にし、予期せぬ問題のリスクを軽減できます。

以上がPHP 8でクロスサイトリクエストフォーファリー(CSRF)から保護する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。