今日、Web アプリケーションに crsf 保護を追加しました。
- HTML が印刷されると、ランダムなトークンが生成され、非表示フィールドとユーザー セッションに配置されます。
- フォームが送信されると、非表示のフォーム フィールドを読み取り、それをユーザー セッションのトークンと比較します。
- トークンが一致する場合、フォームの送信は続行されます。失敗するとエラーが表示されます。
これを実装するために、Web で見つかった実装を使用しました。この実装は、フォームが送信された後、セッションからトークンを削除しませんでした。フォームが送信されたら、不要になったため、セッションからトークンを削除することにしました。
私が今ぶつかったのは、フォームを送信してからブラウザの戻るボタンを押してフォームを再度送信すると、エラーが表示されることです(トークンがユーザーセッションから削除されたが、ブラウザはまだ古いフォームをブラウザに保持しているため)キャッシュし、古いトークンで表示します)。
これを防ぐために、15 分後にユーザー セッションからトークンを削除することを考えました。このようにして、彼は戻ってフォームを再送信できるはずです。これが問題に対する有効で安全な解決策であるかどうか疑問に思っていましたか?