サイトとユーザーをクロス サイト フォージェリ (CSRF) 攻撃から保護したい場合は、フォームのあるすべてのページ$token = md5( time() * rand );
で一意のトークンを生成できます。トークンは非表示の入力フィールドに送信され、同時にセッション変数に保存されます。echo '<input type="hidden" name="token" value="'.$token.'">';
$_SESSION['token'] = $token;
提出されたフォームに記載されているかどうかを確認し、if($_POST['token'] == $_SESSION['token'])
それに応じて処理を進めます。
ただし、一部のユーザーはマルチタスクを行う場合があります。これは、これを投稿している間、私が実際に行っていることです。
投稿を作成している間、さまざまなウィンドウ/タブを開いて、情報を調査したり、スタック オーバーフローに関する他の質問を調べたりします。スタック オーバーフローにより、問題なくフォームを送信できます。
しかし、自分のサイトでこれを行うと、投稿/フォームを作成しながら他のページを閲覧することを意味$token
し、自分のウェブサイトから別のページをプルアップするたびに再生成されます. input
私が取り組んでいるフォームで非表示のトークンを作成し、別のページにアクセスしたときに再生成された変数と一致しなくなるため、最終的に間違った を送信したい...$_SESSION['token']
この問題を防ぐ方法、または CSRF を最初に停止するためのより良い解決策はありますか?
ユーザーにマルチタスクを許可し、CSRF から保護したい...