2

現在、Web プロジェクト用の「Remember Me」システムを実装しています。いくつかの記事を読んだ後(あまり役に立たない記事ですが)、割り当てられたユーザーのアカウント以外のアカウントへのアクセスにCookieが使用されるのを防ぐために、このシステムを思いつきました。

  1. ユーザーがログインし、[Remember Me] ボックスをオンにします。
  2. ユーザーの電子メールとパスワードの組み合わせが認証されます。記憶機能がチェックされるため、長さ 128 文字のランダムなソルトが作成され、ユーザーのユーザー ID とともにテーブルに格納されます。ユーザーのユーザー ID とソルトのハッシュに連結されたユーザーのユーザー ID のハッシュを含む Cookie が設定されます。
  3. ユーザーが Web ページに再度アクセスすると、ユーザー ID とハッシュが分離され、データベースに保存されているソルトとユーザー ID から生成されたハッシュに対してハッシュがチェックされます。値が一致する場合、ユーザーは Cookie が割り当てられたユーザーであり、ユーザーはログインしています。

できる問題/改善点がある場合は、それらを指摘してください。私は常に批判を受け入れています:)

4

5 に答える 5

3

あなたのシステムは良いスタートを切っていますが、それでもハイジャックに対して非常に脆弱です(誰かがクッキーに保存されているハッシュを取得した場合、彼は簡単にセッションを引き継ぐことができます)。

とにかく、これはこれとまったく同じトピックに関するいくつかの良い投稿です:

私はあなたがそれらのリンクを読むことから始めるべきだと思います。

確かに完全な絶対確実なシステムはありません(3番目と4番目のリンクを確認してください。これらはいくつかの興味深い追加機能を提供します。user-agentも使用できる一種の識別子です)。ある種のOpenIDプロバイダー(または複数)を使用して、すべてのセキュリティ関連のものを手に入れることをお勧めします。自分でやりたい場合は、最大のセキュリティを実現するために、長所と短所を比較検討する必要があります。

于 2012-06-18T21:57:28.467 に答える
2

他の人が言ったように、あなたは良いスタートを切っています。特に、Cookie 情報の一部を格納するテーブルを作成することをお勧めします。

user_id
random_hash
ip_address
date_created

次に、ユーザーがログインすると、あなたが言ったようにハッシュを生成し、そのデータをテーブルに挿入し、user_id とハッシュを格納する Cookie を作成します。

ユーザーが戻ってきたら、ハッシュと ip_address をチェックして、一致するものを探します。見つかった場合は、前述の user_id を認証し、使用されたハッシュを削除して、次のログイン用に新しいハッシュを生成します。このようにすることの利点を確認できると確信しています。

また、SSL を使用していることを確認し、(重要) ユーザーがパスワードを入力せずに重要な情報を変更または表示できないようにしてください。

乾杯!

于 2012-06-18T22:16:52.110 に答える
0

はい、それは問題ないように聞こえますが、なぜ車輪を再発明するのでしょうか? セッションについて説明しています。PHP に組み込まれている機能を使用することもできます。

http://php.net/manual/en/features.sessions.php

于 2012-06-18T21:53:45.590 に答える