ページの読み込みごとにランダムなトークンを生成し、それをセッションに入れ、トークンを次のようにタグ属性にバインドするだけで、アプリケーションにCSRF保護を構築しました。<body>
<body data-csrf-token="csrf_GeJf53caJD6Q5WzwAzfy">
次に、すべてのフォーム アクションまたは ajax リクエストで、body タグからトークンを取得して送信します。
大きな問題を除けば、これはうまく機能します。ユーザーがアプリケーションの複数のタブを開いており、トークンの衝突が発生しています。たとえば、ユーザーが最初のページをロードしてトークンを生成し、次にタブを切り替えて別のページをロードすると、新しいトークンが生成されます。最後に、最初のページに戻り、フォーマット アクションを送信します。これにより、無効な CSRF トークン エラーが発生します。
可能な限り安全に保ちながら、複数のタブとの衝突を防ぐためにこれを再構築する最良の方法は何ですか?
ページの読み込みごとに新しいトークンを生成するのではなく、ログイン時に単一のトークンを生成するだけで正しい解決策ですか?