“私を記憶する”を実装する最良の方法は何ですかウェブサイトのために? [閉まっている]
-
05-07-2019 - |
質問
ユーザーがクリックできるチェックボックスをウェブサイトに追加して、ウェブサイトにアクセスするたびにログインする必要がないようにします。これを実装するためにコンピューターにCookieを保存する必要があることはわかっていますが、そのCookieには何を含める必要がありますか?
また、このCookieがセキュリティの脆弱性を提供しないように注意する一般的な間違いはありますか?
解決
永続的なログインCookieのベストプラクティスの改善
ベストプラクティスとしてここで説明したこの戦略を使用できます(2006)またはここで説明する更新された戦略(2015):
- Remember Meをオンにしてユーザーが正常にログインすると、標準セッション管理Cookieに加えてログインCookieが発行されます。
- ログインCookieには、シリーズ識別子とトークンが含まれます。シリーズとトークンは、適切な大きなスペースからの利用できない乱数です。両方がデータベーステーブルに一緒に格納され、トークンがハッシュされます(sha256で問題ありません)。
- ログインしていないユーザーがサイトにアクセスしてログインCookieを提示すると、シリーズ識別子はデータベースで検索されます。
- シリーズ識別子が存在し、トークンのハッシュがそのシリーズ識別子のハッシュと一致する場合、ユーザーは認証済みとみなされます。 新しいトークンが生成され、トークンの新しいハッシュが古いレコードに保存され、新しいログインCookieがユーザーに発行されます(シリーズ識別子)。
- シリーズは存在するがトークンが一致しない場合、盗難が想定されます。ユーザーは厳密な言葉で警告を受け取り、ユーザーが記憶しているセッションはすべて削除されます。
- ユーザー名とシリーズが存在しない場合、ログインCookieは無視されます。
このアプローチは、多層防御を提供します。誰かがデータベーステーブルを漏らしたとしても、攻撃者がユーザーになりすますための開かれたドアを与えることはありません。
他のヒント
ユーザーIDとトークンを保存します。ユーザーがサイトに戻ったら、これらの2つの情報をデータベースエントリのような永続的なものと比較します。
セキュリティに関しては、誰かがCookieを変更して追加の利益を得ることができるようなものをそこに置かないでください。たとえば、ユーザーグループやパスワードを保存しないでください。セキュリティを回避するために変更可能なものは、Cookieに保存しないでください。
UserIdとRememberMeTokenを保存します。ユーザーが「remember me」チェックボックスをオンにしてログインすると、新しいRememberMeTokenが生成されます(マークされている他のマシンは無効になります)。
戻ってきたら、remember meトークンで検索し、UserIdが一致することを確認します。
永続セッションを自分で調査することは、セキュリティリスクに見合うだけではないことがわかりました。どうしても必要な場合に使用しますが、そのようなセッションは認証が弱い場合にのみ考慮し、攻撃者にとって価値のあるものについては新しいログインを強制する必要があります。
もちろん、理由は永続セッションを含むCookieが非常に簡単に盗まれることです。
Cookieを盗む4つの方法(ページのJens Rolandによるコメント < code> @splattne は彼の答えに基づいています):
- 安全でない回線を介して傍受することにより(パケットスニッフィング/セッションハイジャック)
- ユーザーのブラウザに直接アクセスする(マルウェアまたはボックスへの物理的アクセスを介して)
- サーバーデータベースから読み取ることにより(おそらくSQLインジェクションですが、何でも可能です)
- XSSハック(または同様のクライアント側のエクスプロイト)