2

暗号化されたパスワードを保存するユーザーデータベースがあり、「ログインしたままにする」Cookieを作成したいと思います。次の方法は私の目的には十分安全であると思いますが、あなたの考えを聞きたいと思います。

  1. ユーザーが[ログインしたままにする]ボックスを選択し、適切な資格情報を提供した場合は、非常に大きなランダムな文字列を含むCookieを作成します(これをビーコンと呼びます)。これは、ユーザーテーブルの別の列にも格納されます。
  2. ユーザーがページにアクセスするたびに、ユーザーテーブルでビーコンCookieを検索します。存在しない場合は、何もしません。存在する場合は、ユーザーの情報を取得し、ログインしているものとして扱います。
  3. ユーザーがログアウトするか、チェックボックスをオンにせずにログインすると、ビーコンCookieを破棄します。

これは、誰かがビーコン文字列を適切に推測する場合に操作できますが、私の意図は、これを行うのが非常に難しいほど大きくランダムにすることです。

4

3 に答える 3

2

後でセッションを再作成する方法として、通常のセッション処理に加えてこれが行われていると思います。

セキュリティを向上させるためにできることがいくつかあります。

  1. SSLを使用すると、Cookieの傍受がはるかに困難になります。
  2. 使用するたびにCookieハッシュを再生成します。1回のログインでのみ有効です。
  3. これを1つのCookieとして1人のユーザーに保存する場合、ユーザーが複数のデバイスを使用していると機能しません(最初のデバイスからのCookieが2番目のデバイスのCookieによって上書きされます)。
  4. ハッシュはランダムである必要があり、生成時にユーザーデータを組み込まないようにする必要があります。
  5. ユーザーデータ(特に電子メール、パスワード)を変更するには、パスワードが必要です。Cookieが傍受された場合、傍受者はアカウントのデータを変更できなくなります。
于 2013-01-21T21:35:14.037 に答える
0

これは「rememberme」Cookieを実装するための最良の方法ではないと思います。ハッシュを大きくすることは解決策ではありません。

あなたのクッキーにもっと何かを保存することを考えてください。

あなたはこれを提案します:

'a89bd752123cde09'

ユーザーが多い場合は、有効なトークンを取得するのはそれほど難しくないかもしれません。

このハッシュにユーザーIDを追加するだけの場合...

$userID . '-' . 'a89bd752123cde09

今、彼らは正しいユーザーIDに関連付けられた有効なトークンを取得する必要があります、私たちはそれを少し複雑にしました

ユーザーのブラウザまたはセッションに関する何かを連結して暗号化することもできます。おそらく次のようになります。

hash_hmac('sha256', $userID . '-' . 'a89bd752123cde09' . '-' . md5(timeStamp when remember expires) . '-' . md5(browser user agent), A_SECRET_KEY);

あなたがクッキーをチェックするとき、それを解読し、データが正しいことをチェックします。

それは最善の解決策ではありませんが、私はそれがより良いと思います。Webセキュリティについては多くの情報があり、それについて読んで、これを直接実装しないでください。

于 2013-01-21T21:50:55.167 に答える
0

セッションを最初から再作成しようとしているようです。session_set_cookie_params()に本当に長いタイムアウトを渡してみませんか?

于 2013-01-21T21:38:40.127 に答える