ユーザーは、メッセージを作成して、事前に決められた英数字コードを使用して広告媒体を介してメッセージを共有できるSaaSプラットフォームを構築しました。CSRF - 正常にセッションを正常に終了しない
私たちのフォームはすべて、CSRFトークンを使用していますが、私は問題に気づきました。ユーザーがメッセージを編集しているときに休憩して編集やヒットを保存し直すと、「CSRF不一致」という警告メッセージが表示されます。これは、有効なトークンを再生成するためにページをリフレッシュし、変更を失わなければならないため、重大な問題です。
初期のCSRFトークンは、filenameやphp_uname()などの静的なパラメータに基づいて生成されますが、session_id()でも生成されています。したがって、session_idが変更されると、新しいCSRFトークンが生成され、明らかに古いトークンと一致しないため、警告メッセージが表示されます。
ユーザー認証が必要なフォームでCSRF保護を無効にするのは簡単ですが、ユーザーログインなどの認証を必要としないフォームがいくつかあります。ユーザーのログインに「CSRFの不一致」を示すのは大したことではありませんが、それが何を意味するのか分からないユーザーにはうんざりしていて、「この問題を解決」してサイトを離れることになります。
だから私は、無防備な警告メッセージを生成せずに、フォーム保護の外観を維持するための代替ソリューションを探しています。
代わりにCSRFオフに基づいてSESSION_IDを生成する2つの潜在的なソリューション...
1)は、それはいくつかのクッキーの値をオフに基づいて生成し、これは優雅なクロスセッション処理が可能になります。
2)CSRFをまとめて削除します。代わりに、すべてのフォーム投稿のREFERERを検証し、親ドメインと一致する場合は続行します。これにより、他のサイトが私たちのフォームに投稿されないようにします(CSRFの主な目的)。実際にこのソリューションをajaxリクエストに使用しています。
私はオプション#2に傾いていますが、考慮すべき他の優雅なソリューションがあるかどうかを確認したいと考えました。
REFERERは使用しないでください。スプーフィングするのは簡単ではなく、信頼できません。 –
@AlexHowansky:良い点が記載されています。 –