web-dev-qa-db-ja.com

パスワードを記憶するが選択されている場合、ユーザー資格情報はどこに保存されますか?

ユーザーが前回Webアプリケーションにログインしているときに「記憶」オプションを選択した場合、Webアプリケーションサーバーは、次回ログインしたときにユーザーをどのように識別しますか?資格情報は、クライアント側自体のCookieに保存されますか?それは巨大なセキュリティ問題を正しくするでしょうか?誰か説明してください

4
Anandu M Das

通常、ユーザーのブラウザには、サーバー上のユーザーを識別するランダムな文字列を含むCookieがいくつか格納されています。これのより安全なバリアントは、ブラウザーのバージョン、ユーザーのOS、おおよその場所などの他のパラメーターもチェックします。

基本的に、Cookieを使用してFacebookなどのWebページにアクセスすると、Cookie内のランダムな文字列でのみ認証されます。

仕組み:ログインすると、サーバーはこのランダムな文字列を生成し、データベース(他の識別パラメーターと一緒に)に格納します。さらに、この文字列をCookieとしてユーザーのブラウザに送信します。この文字列は、リクエストごとに保存され、ページに配信されます。そのため、ランダムな値のリクエストがある場合、サーバーはそれが他の識別パラメーターと一致するかどうかを確認し、一致する場合はログインしたユーザーとして受け入れます。

7
Tokk

これは、さまざまな方法で実装できる(そして実装されてきた)ので、非常に幅広い質問です。それらは一般的にブラウザに永続的なクッキーを保存することを含みます、そしてここにいくつかあります。 Cookieには次のものが含まれる場合があります。

  1. 認証トークン。 (Tokkが彼の回答で説明したように)。ユーザーが戻ったときに(たとえば、データベース内の)サーバーの状態を使用して、認証トークンをユーザーアカウントに関連付けることができます。
  2. ユーザー識別子。これはステートレスモデルであり、サーバーでセッションの記録を保持する必要はありません。ユーザーが有効なユーザーIDを含むCookieを使用してアクセスし続ける限り、ユーザーは認証され、ページリクエストの間隔が10秒であるか10日であるかは関係ありません。
  3. 資格情報。これは、ステートフル/ステートレスのハイブリッドモデルであり、セッションの記録を維持する必要はありませんが、認証されたユーザー(セッションCookieを持つ)と記憶されたユーザー(資格情報付きのCookieを持つユーザー)は異なります。 、しかしまだセッションcookieはありません。)資格情報がcookieにプレーンテキストで保存されている場合、これは大規模なセキュリティホールになる可能性があります。適切な暗号化があれば、私はそれを選択しませんが、その場合はセキュリティリスクはそれほど大きくありません。 (アプリケーションが資格情報の不要な追加処理を行うという点で、追加のリスクが少しありますが、それは比較的小さなリスクです。)

「Remember Me」機能の大きなセキュリティリスクは何ですか?主に、ユーザーに遠くまで有効なCookieを提供していること、およびそのCookieが悪用された場合の不正使用の可能性がはるかに大きくなっています。したがって、これを念頭に置いて、このCookieを保護するように注意する必要があります。たとえば、HTTPSは防御の最前線として使用する必要があり、Cookieはsecureとしてマークする必要があります。潜在的な乱用を抑制するために、ユーザーが不要になった有効なセッションを強制的に終了できるようにするステートフルモデルがある場合に役立ちます。

つまりtl; drは次のとおりです。資格情報はCookieに保存される場合とされない場合があります。それらが適切に暗号化されていない場合、これは重大なリスクです。これは、「記憶」機能がWebサイトに実装されている方法ではない可能性がありますが、疑わしい場合は、Cookieを確認してください。

2
Xander