1

今日、Web アプリケーションに crsf 保護を追加しました。

  • HTML が印刷されると、ランダムなトークンが生成され、非表示フィールドとユーザー セッションに配置されます。
  • フォームが送信されると、非表示のフォーム フィールドを読み取り、それをユーザー セッションのトークンと比較します。
  • トークンが一致する場合、フォームの送信は続行されます。失敗するとエラーが表示されます。

これを実装するために、Web で見つかった実装を使用しました。この実装は、フォームが送信された後、セッションからトークンを削除しませんでした。フォームが送信されたら、不要になったため、セッションからトークンを削除することにしました。

私が今ぶつかったのは、フォームを送信してからブラウザの戻るボタンを押してフォームを再度送信すると、エラーが表示されることです(トークンがユーザーセッションから削除されたが、ブラウザはまだ古いフォームをブラウザに保持しているため)キャッシュし、古いトークンで表示します)。

これを防ぐために、15 分後にユーザー セッションからトークンを削除することを考えました。このようにして、彼は戻ってフォームを再送信できるはずです。これが問題に対する有効で安全な解決策であるかどうか疑問に思っていましたか?

4

1 に答える 1

2

CSRF を防ぐだけでなく、トークンはフォームの二重送信を防ぐのにも役立ちます。ユーザーが同じフォームを 2 回送信した場合、あなたのアプリケーションが満足できるとは思えません。したがって、最初の送信でトークンを削除し、2 回目の送信で「フォームの送信が無効であるか、すでに処理されています ...」というメッセージを表示しても問題ありません。

于 2013-05-15T16:23:30.547 に答える