1

私は、ユーザーが認証するときに「rememberme」オプションを持つプロジェクトの開始時にいます。

私のユーザーのデータベーステーブルには、認証のための次の基本構造があります。

  • id:ユーザー登録時に生成される乱数。(鍵)
  • username:ユーザーが選択したユーザー名は、別の一意のユーザー名に変更できます。
  • hash:パスワード設定時に「phpass」で作成されたパスワードのハッシュ。

CookieとMySQLを使用して、複数のコンピューターにユーザーがログインし続けるための安全な方法を知りたいです。

同じCookieを使用して、一時的なセッションまたは「rememberme」セクションを保存できるようにしたいと思います。トークンとすべてのユーザー情報をCookieにハッシュすることについて読みましたが、安全ですか?ユーザー認証後に使用されるFacebookのCookieを確認しましたが、ユーザーIDの入力がありますが、本当に必要なことですか?

情報をCookieにハッシュすることにした場合、おそらく遅い「phpass」または単純なMD5関数を使用する必要があります。認証検証は、すべてのページとすべてのAJAX要求に含まれていることがわかりますか?ログインを確認するたびにユーザートークンを更新する必要がありますか?

最後に、私が持っている最良の選択は何ですか?これに似た質問がたくさんあることは知っていますが、これを行うための「最良の方法」のようなものは見つかりませんでした。すべての投稿で、この主題について何か異なった矛盾していることがわかります。安全でクリーンな方法を知りたいのですが。

4

1 に答える 1

2

保存したログインセッションを保存するには、別のテーブルを使用することをお勧めします。このテーブルには、ユーザーが「私を覚えている」ことを選択したときに生成された一意のハッシュ、ユーザーのIPアドレス、およびユーザーIDが格納されます。

ユーザーが永続的なログインを維持することを決定した場合、またはその場合は、ハッシュを生成し、そのハッシュをCookie値として保存し、IP/user_idを「記憶された」テーブルに保存します。

session_start / checkシーケンスで、最初にセッションが設定されているかどうかを確認します。設定されていない場合は、Cookieが設定されているかどうかを確認します。Cookieが設定されている場合は、IPアドレスをデータベースに対するCookieのハッシュ値と照合し、すべてがチェックアウトされている場合は、 「認証済み」としてのセッションステータス。

IPアドレスと一意のハッシュを使用してテーブルを作成する理由は、複数のデバイス/コンピューターを永続化できるようにするためです。各デバイスには、remembered_sessionsテーブルにエントリがあります。

この方法では、パスワードはCookieに保存されません。パスワードを正常に入力したユーザーのみが、このCookieをコンピューターに保存します。さらに、誰かがCookieでそのユーザーのハッシュを取得した場合でも、認証されたと見なされるには、同じネットワーク上にいる必要があります。

于 2012-11-06T21:05:44.633 に答える