3

Cookieを使用し、セッションIDをデータベースに保存するログインシステムを作成したので、ログインはその特定のセッションIDでのみ機能します。これにはいくつかの問題があることに気づきました。

  1. 別のデバイスにログインすると、セッションIDが変更されます(マルチログインなし)
  2. セッションIDは、実際にはログインしているユーザーを識別する唯一のものです(Cookieはドメイン固有であるため、これがセキュリティリスクであるかどうかはわかりません)

ただし、Cookieに付属する永続的なログインを維持しながら、安全を確保したいと考えています。

事実上、Cookieを使用してユーザーをWebサイトに安全にログインさせるためのより良い方法があるかどうかを知りたいです。

4

1 に答える 1

2

まず第一に、安全で永続的なログインを維持することは一緒になりません。何らかの方法で永続的なログインを導入することにより、常にセキュリティを危険にさらすことになります。

そうは言っても、Charles Millerの記事では、そのようなシステムの概要を説明しています。

  1. (十分な大きさの)ランダムキーを作成します。できれば、/dev/urandomまたはopenssl_random_pseudo_bytes()を使用してアカウントに関連付けます(データベース用語では、ランダムキーをプライマリ(または一意の)インデックスとして、アカウントを外部キーとして持つ別のテーブル)。キーはCookieの値になります。

  2. ログインしていないユーザーがCookieを提示すると、キーとアカウントが検索され、ユーザーがログインします。その後、使用されたキーが新しいランダムキーに置き換えられます(Cookieも更新されます)。

  3. Cookieのみを介してログインしているユーザーは、機密(アカウント)情報にアクセスするときにパスワードの入力を再度求められる必要があります。

  4. ユーザーには、すべてのデバイスからログアウトするオプションが必要です。

session_regenerate_id()また、ユーザーがログインするたびに(フォームまたはCookieを介して)使用してセッションIDを更新することもお勧めします。これにより、誰かが他の誰かに対してセッション固定攻撃を開始し、場合によっては自分のIDを盗むことを防ぎます。

個人情報の盗難検出も処理できるBarryJaspenによるこの設計の改善点は、ここにあります。

于 2012-08-21T01:36:40.340 に答える