ユーザーがクリックできるチェックボックスを Web サイトに追加し、Web サイトにアクセスするたびにログインしなくても済むようにしたいと考えています。これを実装するにはユーザーのコンピューターに Cookie を保存する必要があることはわかっていますが、その Cookie には何を含める必要がありますか?
また、この Cookie がセキュリティ上の脆弱性をもたらさないようにするために注意すべき一般的な間違いはありますか? セキュリティ上の脆弱性は、「ログイン情報を記憶する」機能を提供しながら回避できるでしょうか?
ベストアンサー1
永続ログイン Cookie のベスト プラクティスの改善
この戦略は、ここではベストプラクティスとして(2006)またはここで説明されている最新の戦略(2015):
- 「Remember Me」をチェックしてユーザーがログインに成功すると、標準のセッション管理 Cookie に加えてログイン Cookie が発行されます。
- ログイン クッキーには、シリーズ識別子とトークンが含まれています。シリーズとトークンは、適切な大きさの空間から抽出された推測不可能な乱数です。両方ともデータベース テーブルに一緒に保存され、トークンはハッシュ化されます(sha256 で問題ありません)。
- ログインしていないユーザーがサイトにアクセスし、ログイン クッキーを提示すると、シリーズ識別子がデータベースで検索されます。
- シリーズ識別子が存在し、トークンのハッシュがそのシリーズ識別子のハッシュと一致する場合、ユーザーは認証済みとみなされます。新しいトークンが生成され、トークンの新しいハッシュが古いレコード上に保存され、新しいログイン Cookie がユーザーに発行されます (シリーズ識別子を再利用しても問題ありません)。
- シリーズは存在するがトークンが一致しない場合は、盗難とみなされます。ユーザーには強い警告が表示され、ユーザーの記憶されたセッションはすべて削除されます。
- ユーザー名とシリーズが存在しない場合、ログイン クッキーは無視されます。
このアプローチは多層防御を実現します。誰かがデータベース テーブルを漏洩したとしても、攻撃者がユーザーになりすますための扉を開くことはありません。