2017-01-02 3 views
0

私はフォーム内で送信するcsrfトークンを持っており、セッションに保存してフォームが送信されたときに同等かどうかを確認できます。csrfトークンがブラウザのリフレッシュボタンを使用してフォームの再送信時に一致しない

csrfトークンはすべてのページ読み込み時に生成されます。つまり、セッション内のcsrfトークンも同様に変化しています。ブラウザの「更新」ボタンでフォームを再送信すると、古いトークンからエラーがスローされます。

キャッシュされたブラウザのデータにトークンを変更する方法はありますか?

+1

確かにリフレッシュするたびにリフレッシュする必要はありません。それはCSRFのポイントの一部ですか?誰かが一度フォームを送信してフォームを受信ページをリフレッシュすると、リフレッシュするたびに新たに再送信されます.... spam – Martin

答えて

1

いいえ。キャッシュされたデータでもなく、前のリクエストを繰り返すようブラウザに要求しています。

PGR patternを使用すると、リフレッシュによって表示ページが読み込まれ、処理のためにフォームデータが再送信されないようにすることができます。

これは、ページロードごとではなく、一般的にはgenerate the token once per sessionであると考えられています。これは、一度に2つのタブでサイトにアクセスする人々の問題も解決します。

+0

以前のすべてのWeb開発アプリケーションにレールを使用していましたが、フォーム内でcsrfトークンが変更されていますすべてのリフレッシュ、さらにはリフレッシュ時にデータを再送信することが許可されているので、私はここで混乱していますか? – medBo

+0

@medBoトークンは、セッションで保持されている固定値のパスワードハッシュかもしれません。したがって、ハッシュは常にパスワードが生成されるたびに変更されますが、常にセッションの値と正確に比較されます。 – Martin

関連する問題