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

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

James Robert Taylor
James Robert Taylorオリジナル
2025-03-10 16:31:17374ブラウズ

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

>

PHPでのクロスサイトリクエスト偽造(CSRF)攻撃から保護するには、Webサイトから発信された要求がユーザーが真に開始し、悪意のあるサードパルティサイトにfeされていないことを確認するための堅牢なメカニズムを実装することが含まれます。 中核的な原則は、サーバーが正当なユーザーアクションと詐欺的な要求を区別できるようにすることです。これは通常、テクニックの組み合わせを使用して達成されます:

1。シンクロナイザートークンパターン:これは最も一般的で効果的な方法です。 サーバーは、一意で予測不可能なトークン(多くの場合、長いランダムな文字列)を生成し、サーバー側のセッション変数に保存し、ユーザーが提出したHTMLフォームの非表示フィールドとしても含めます。 フォームが送信されると、サーバーは、トークンがセッションに保存されているトークンと一致することを確認します。それらが一致しない場合、要求は潜在的に不正として拒否されます。 Double Submit cookie:この方法では、隠されたフォームフィールドとCookieの両方にランダムに生成されたトークンを保存することが含まれます。 サーバーは両方の値を比較します。 これにより、CSRF攻撃がフォームとCookieの両方を操作する必要があるため、セキュリティの追加層が追加されます。 HTTP参照ヘッダーチェック:

信頼できるスタンドアロンメソッドではありませんが(参考文献ヘッダーは簡単に操作できるため)、補足測定として使用できます。 リクエストが独自のドメインから発生することを確認するには、

変数を確認してください。 ただし、この方法は簡単にバイパスされるため、常に他の方法に依存しています。PHPアプリケーションでCSRF保護を実装するためのベストプラクティスは何ですか?

<code class="php"><?php
session_start();

// Generate a unique token if it doesn't exist
if (!isset($_SESSION['csrf_token'])) {
  $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// Include the token in the form
?>
<form method="POST" action="process_form.php">
  <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
  <!-- ... other form fields ... -->
  <input type="submit" value="Submit">
</form>

<?php

// In process_form.php:
session_start();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die("CSRF attack detected!");
  }
  // Process the form data securely
}
?></code>
CSRF保護を実装するには、1つの手法を使用する以上のものが必要です。 ベストプラクティスには、セキュリティを最大限に活用するためのいくつかの方法を組み合わせた層状アプローチが含まれます。
  1. 常にシンクロナイザートークンパターンを使用します。これは、効果的なCSRF保護の基礎です。 暗号化されたランダム数ジェネレーターを使用して真にランダムなトークンを生成するようにしてください(PHPのrandom_bytes()など)。 すべての入力を厳密に消毒および検証して、CSRFと組み合わせることができるXSS攻撃のような他の脆弱性を防ぐために、
  2. フレームワークとライブラリを定期的に更新します。 (HSTS):
  3. HTTPSを強制して、CSRF保護を妥協する可能性のある中間攻撃を防止します。
  4. 定期的なセキュリティ監査:
  5. CSRF保護メカニズムの潜在的な弱点を特定して対処するために定期的なセキュリティ監査を実施します。ユーザーとアプリケーション。 機密データと機能へのアクセスを許可されたユーザーのみに制限します。 これには、多面的なアプローチが含まれます:
  6. CSRFトークンを確認します:これは最重要です。 トークン送信されたトークンが生成され、サーバー側に保存されているトークンと一致していることを確認してください。
  7. HTTPメソッドを検証します。 たとえば、重要な更新は、投稿を介してのみ許可される可能性があります。
  8. 要求の原点を確認します(注意して):
  9. ヘッダーを検査することは検証の二次層を提供できますが、主にシンクロナイザートークンと形式では、予想されるデータ型と形式と一致するようにします。 これにより、CSRFトークンが有効であっても、予期しないデータが処理されません。アプリケーション。
    1. symfony:Symfonyフレームワークは、アプリケーションに簡単に統合できる組み込みのCSRF保護メカニズムを提供します。
    2. codeigniter:
    3. codeigniterはセキュリティライブラリを通じてCSRF保護機能を提供します。これは簡単に構成および統合できます。パッケージスト。 ただし、アプリケーションに統合する前に、常にサードパーティライブラリを慎重に審理してください。
    4. ライブラリやフレームワークの支援があっても、CSRF保護の根本的な原則を理解し、包括的なセキュリティを確保するためのベストプラクティスを実装する必要があることを忘れないでください。 その仕組みを理解せずに図書館のみで頼るのは危険です。

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

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