ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用して Web フォームを CSRF 攻撃から保護するにはどうすればよいですか?
CSRF トークンを使用した Web フォームのセキュリティ保護: PHP の例を含む包括的なガイド
クロスサイト リクエスト フォージェリ (CSRF) は悪意のある攻撃手法ですWeb の脆弱性を悪用して、ユーザーに代わって不正なアクションを実行します。 Web サイトを CSRF から保護するには、堅牢なトークン メカニズムを実装することが重要です。この記事では、PHP を使用して CSRF トークンを追加し、そのプロセスで直面する課題に対処するための詳細なガイドを提供します。
安全なトークンの生成
CSRF トークンを生成するときは、以下を使用することが不可欠です。予測可能性を回避し、十分なエントロピーを確保するための信頼できるランダム ソース。 PHP 7 は、random_bytes() 関数を提供しますが、PHP 5.3 は、この目的のために mcrypt_create_iv() または openssl_random_pseudo_bytes() を利用できます。 rand() や md5() のような脆弱なメソッドは避けてください。
PHP 7 の例:
if (empty($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(32)); } $token = $_SESSION['token'];
PHP 5.3 の例 (またはext-mcrypt):
if (empty($_SESSION['token'])) { if (function_exists('mcrypt_create_iv')) { $_SESSION['token'] = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); } else { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } $token = $_SESSION['token'];
フォームとの統合
HTML フォームに、生成された CSRF トークンを安全に送信するための入力フィールドを含めます。サーバー:
<input type="hidden" name="token" value="<?php echo $token; ?>" />
トークン検証
フォームが送信されると、送信されたトークンをセッションに保存されているトークンと検証します:
if (!empty($_POST['token'])) { if (hash_equals($_SESSION['token'], $_POST['token'])) { // Proceed to process the form data } else { // Log this as a warning and keep an eye on these attempts } }
フォームごとのトークンと HMAC
セキュリティを強化するには、フォームごとのトークンの使用を検討してください。別の HMAC キーを生成し、hash_hmac() を使用して CSRF トークンを特定の形式にロックします。
$calc = hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']); if (hash_equals($calc, $_POST['token'])) { // Continue... }
Twig を使用したハイブリッド アプローチ
Twig ユーザーは、一般とロックダウンの両方を生成するカスタム関数トークン:
{{ form_token() }} {{ form_token('/my_form.php') }}
使い捨て CSRF トークン
使い捨てトークンが必要なシナリオの場合は、Paragon Initiative Enterprises の Anti- CSRF ライブラリ。トークンの引き換えと有効期限を管理します。
これらの手法を実装することで、 Web サイトを CSRF 攻撃から効果的に保護し、ユーザー インタラクションの整合性を確保できます。
以上がPHP を使用して Web フォームを CSRF 攻撃から保護するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。