536

Web サイトにアクセスするたびにログインする必要がないように、ユーザーがクリックできるチェックボックスを Web サイトに追加したいと考えています。これを実装するには、コンピューターに Cookie を保存する必要があることはわかっていますが、その Cookie には何が含まれている必要がありますか?

また、この Cookie がセキュリティの脆弱性を示さないようにするために注意すべきよくある間違いはありますか?

4

4 に答える 4

563

改善された永続ログイン Cookie のベスト プラクティス

ここで説明されているこの戦略をベスト プラクティス(2006 年)として使用することも、ここで説明されている更新された戦略(2015 年)を使用することもできます。

  1. ユーザーが「Remember Me」をオンにしてログインに成功すると、標準のセッション管理 Cookie に加えてログイン Cookie が発行されます。
  2. ログイン Cookie には、シリーズ ID とトークンが含まれています。シリーズとトークンは、適切な大きさのスペースから推測できない乱数です​​。両方ともデータベース テーブルに一緒に格納され、トークンはハッシュされます(sha256 で問題ありません)。
  3. ログインしていないユーザーがサイトにアクセスしてログイン Cookie を提示すると、シリーズ ID がデータベースで検索されます
    1. シリーズ IDが存在し、トークンのハッシュがそのシリーズ ID のハッシュと一致する場合、ユーザーは認証済みと見なされます。新しいトークンが生成され、トークンの新しいハッシュが古いレコードに保存され、新しいログイン Cookie がユーザーに発行されます (シリーズ識別子を再利用してもかまいません)。
    2. シリーズは存在するがトークンが一致しない場合、盗難が想定されます。ユーザーは強い言葉の警告を受け取り、ユーザーの覚えているセッションはすべて削除されます。
    3. ユーザー名とシリーズが存在しない場合、ログイン Cookie は無視されます。

このアプローチは、多層防御を提供します。誰かがデータベース テーブルを漏えいしたとしても、攻撃者がユーザーになりすますための扉を開くことはできません。

于 2008-10-28T21:20:49.473 に答える
10

UserId と RememberMeToken を保存します。彼らがログインしてログインすると、チェックがオンになり、新しいRememberMeTokenが生成されます(これにより、マークされた他のマシンが無効になり、「私を覚えている」とマークされます)。

ユーザーが戻ってきたら、remember me トークンで検索し、UserId が一致していることを確認します。

于 2008-10-28T21:14:25.150 に答える
9

ユーザー ID とトークンを保存します。ユーザーがサイトに戻ってきたら、これら 2 つの情報をデータベース エントリなどの永続的なものと比較します。

セキュリティに関しては、誰かが Cookie を変更して追加の利益を得ることができるようなものをそこに置かないでください。たとえば、ユーザー グループやパスワードを保存しないでください。セキュリティを回避するような変更が可能なものは、Cookie に保存しないでください。

于 2008-10-28T21:17:53.427 に答える
4

永続的なセッションを自分で調べたところ、セキュリティリスクに見合うだけの価値はないことがわかりました。どうしても必要な場合に使用しますが、そのようなセッションは弱く認証されていると見なし、攻撃者にとって価値のあるものに対しては新しいログインを強制する必要があります。

もちろん、その理由は、永続セッションを含むCookieが非常に簡単に盗まれるからです。

あなたのクッキーを盗む4つの方法(彼の答えに基づいたページのイェンス・ローランドによるコメントから):@splattne

  1. 安全でない回線を介して傍受する(パケットスニッフィング/セッションハイジャック)
  2. ユーザーのブラウザに直接アクセスする(マルウェアまたはボックスへの物理的アクセスを介して)
  3. サーバーデータベースから読み取ることによって(おそらくSQLインジェクションですが、何でもかまいません)
  4. XSSハッキング(または同様のクライアント側のエクスプロイト)による
于 2009-02-21T10:17:58.020 に答える