1

現在、ユーザーがログインした後、次の PHP コードを使用して、ユーザーの ID 番号を Cookie に保存するだけです。

setcookie('userid', "$userid", time()+60*60*24*7*2, '/');

上記のコードは、2 週間有効で、非公開ではないユーザーの ID 番号 (変数 $userid に格納されている) を含む Cookie を設定します。また、ユーザーは 2 週間ログインしたままにすることができます。これはおそらく、ユーザーがログインしていることを示すために Cookie を設定する最も安全性の低い方法の 1 つであることを認識しています。Cookie のパラメーターを変更するだけで、希望する任意のユーザーとしてログインできるからです。

したがって、上記の Cookie が実現するすべてのことを実現し、さらに安全な Cookie を設定するにはどうすればよいでしょうか?

言い換えれば、安全で、少なくともユーザーのセッション中にユーザーの ID 番号を識別できるようにする Cookie を設定する最善の方法は何ですか? また、Cookie を 2 週間保持して、ユーザーが Web サイトにログインし直す必要がないようにしたいと考えています。

4

5 に答える 5

3

代わりにセッションを使用してください。セッション ID を Cookie に保存しますが、実際のデータはすべてサーバーに保存されるため、誰もいじることはできません。

于 2012-10-18T03:39:52.503 に答える
1

ユーザーに固有の 2 番目の Cookie (ハッシュ値) も送信する必要があります。たとえば、2 番目の Cookie には、ユーザー ID、ユーザー名、パスワード、およびソルト値のハッシュが格納されます。

md5($userId.$userName.$passwordHash.$userSalt);

最初の Cookie からユーザー ID がわかるので、データベースでそのユーザーを見つけます。2 番目の Cookie は、ユーザー ID を検証するために使用する必要があります。ハッシュ Cookie の値が正確に一致しない場合は、サーバーが 2 番目の Cookie を提供していないことがわかり、暗黙的なログイン要求を拒否する必要があります。

于 2012-10-18T03:58:38.760 に答える
0

ユーザー固有のデータと組み合わせて安全なハッシュ (サーバーのみが認識する) を使用し、ハッシュを作成します。ID の代わりに値として保存します。リクエストを受け取ったら、ハッシュを再生成して比較します。XSS アタッチまたは CSRF に対して依然として脆弱であることに注意してください。心配な場合は、それらにも対処してください。Cookie はデータを保存する悪い方法です。上記で停止するのは、誰かが Cookie をランダムなユーザー ID に設定してログインすることです。

これは、自動ログインが必要で、セッション ID とは別に保持する場合です。他の回答が示唆するようにしない場合は、セッションを使用してください。

于 2012-10-18T03:46:23.723 に答える
0

ログインに成功した後、すべてのユーザーデータをセッションに保存する必要があります。呼び出すsession_start()と一意の ID が生成され、ブラウザの Cookie に保存されます。また、ブラウザがリクエストを行うたびに、Cookie の値が一緒に送信されます。セキュリティを強化するためにregenerate、ログインに成功した後にセッション ID を取得できます。

于 2012-10-18T03:49:50.243 に答える
0

また、mcrypt を使用して、Cookie 内の一部のデータを暗号化することもできます。

何らかの目的で必要になった場合は、復号化してください。

于 2012-10-18T03:56:50.257 に答える