web-dev-qa-db-ja.com

パスワードはCookieに保存されますか?暗号化されていますか?

Security.stack.exchangeに接続するたびに、自動的にログインします。ブラウザにパスワードを保存することを許可していません。 security.stack.exchangeによって保存されたすべてのCookieを削除すると、ユーザー名とパスワードを入力して自分でログインする必要があります。したがって、stack.exchangeは自動ログインを可能にする一意の識別子またはパスワードをCookieに保存する必要があると結論付けました。

Stack Exchangeによって保存されたCookieを確認したところ、t = "something"&s = "something"を含む「セキュリティユーザー」という名前のCookieのコンテンツが見つかりました。これは私のユーザー名とパスワードですか? Cookieに保存されているパスワードは暗号化されていますか?

chromeブラウザを使用したところ、stackexchangeによって保存された3つのCookieが見つかりました。
私。 「認証済み」
ii。 「セキュリティユーザー」、t = ""&s = ""を含む
iii。 IDを含む「sgt」

一意の識別子が保存されていると思われるcookie "sgt"を削除しても、まだ自動的にログインしています。したがって、私はcookieの「セキュリティユーザー」に疑いを持っています。

また、ブラウザにパスワードを保存することを許可していない場合、Webサイトが私の同意なしにログイン情報を保存するのはなぜですか。これは正しい行動ですか?

11
Curious

通常、パスワードはCookieに保存されません。ユーザー名とパスワードを使用してexample.comにログインすると、これらは自分のものであることが確認され(通常はパスワードをハッシュし、パスワードのハッシュがそのユーザー名のユーザーのハッシュと一致することを確認することによって)、サーバーが発行します。あなたのための秘密の識別子としての長い乱数トークン。

彼らが62文字(大文字26文字、小文字26文字、数字10文字)から24個のランダムな文字を選択するとします。彼らはこの識別子を有効であなたに関連付けられているものとしてデータベースに保存します。ログイン中にリクエストを行うたびに、CookieをWebサイトに送信します。この識別子でリクエストが送信されるたびに、リクエストが有効なログインユーザーに関連付けられているかどうかが検索され、関連付けられている場合は、そのユーザーに関する情報が提供されます。

62があります24 〜1043 〜2142 可能性。トークンが発行された10億(9)のサインインユーザーがWebサイトにある場合、ランダムに1つを推測できるまで、およそ10 ^ 37の可能性を試す必要があります。 (1回の試行に1ナノ秒かかる場合、約10時間がかかります。11 有効なトークンを推測できたのは幸運だった10億年前です)。

セッションCookieは通常、一定期間のみ有効であり、サーバー側のデータベースにも保存されます。

このテーマには他にもバリエーションがあります。たとえば、サーバー側のシークレットに基づいて保存されたタイムスタンプを持つHMAC(ハッシュメッセージ認証コード)を使用します。これは、サーバーにログインすると、タイムスタンプとそのタイムスタンプの強力なハッシュ、およびサーバー側のシークレットと組み合わせたユーザー名を提供します。つまり、ログイン時にサーバーがh = HMAC(secret + timestamp + username)を計算し、計算されたhを返します。次に、(h、username、timestamp)をログイン情報として送信します。 (そしてサーバーはあなたのユーザー名とタイムスタンプを受け取り、hを再計算してあなたが与えたhと比較し、タイムスタンプがまだ有効で古くないことを確認します)。

今、私はstackexchangeがそれをどのように行うかの詳細(例えば、t=...&s=.... の一部 .security.stackexchange.com)ですが、おそらくこのスキームのバリエーションです。つまり、回復可能な方法でユーザー名またはパスワードを暗号化しません-データベースに保存されるか、サーバー側のシークレットに依存する一方向ハッシュ関数に基づいています。

20
dr jimbob