[PHP-users 17522]Re: Sessionをつかったログイン情報の保存
Y.Watanabe
yuw @ msj.biglobe.ne.jp
2003年 8月 26日 (火) 23:57:06 JST
渡辺です。
考え方はいろいろだとは思いますが、
> 1.ログイン成功後、IDとパスワードを
> セッションに保管させる。
> 他のページに移るたびに、そのIDとパスワードが
> 正しいかどうかDBに問い合わせ、検証する。
>
> 2.ログイン成功後、IDのみを
> セッションに保管させる。
> セッションに保管されたIDは正しいので、
> ページの移動時にはパスワードの検証は無しで、
> 保管されたIDのみでユーザーを認知する。
> ※この場合、ユーザーがクッキーをいじって
> 他のユーザーになりすますことが可能なら危険ですが、
> そんなことできるのでしょうか?
>
> 3.ログイン成功後、IDをセッションに保管させる。
> その際に、一時的なパスワードを発生させ、
> DBに登録する。
> その一時的なパスワードもセッションに保管する。
> 他のページに移るたびに、そのIDと
> 一時的なパスワードが正しいかどうかを
> DBに問い合わせ、検証する。
1の方法をとるのがベストじゃないでしょうか。
(このへん、他のかたのご意見も求むです)
2の方法はDBへの負担が減るという意味で良いでしょう。がしかし、
> ※この場合、ユーザーがクッキーをいじって
> 他のユーザーになりすますことが可能なら危険ですが、
> そんなことできるのでしょうか?
というキケンが残る・・・
・・・・・
・・・ような気がするだけで、
実はセッションIDを盗聴された場合のことを考えると
1、2,3のどの方法をとってもセッションハイジャックの危険性は
同じなような気がします(w
セッション管理の安全性を高める話は
[PHP-users 17252]セッションハイジャック対策
http://ns1.php.gr.jp/pipermail/php-users/2003-August/017782.html
のあたりを見てみてください。
あと、セッションの有効期限も気にしたほうがよいでしょう。
よくある手段としては、session.cookie_lifetimeの値を調整するとか。
ただ、セッションIDを保持させるクッキーの有効期限を使って
セッション自体の有効期限を制御するのって、案外脆弱なような
気がします。クッキーの有効期限ってブラウザ側で細工してしまえそうな
気がするから・・・。
だとすると、
ユーザーIDやパスワードのほかに、
「ユーザー認証がOKとなってそのセッションが発行された日時」も
セッション情報としてサーバー側に保持しておき、
アクセスがあるたびに、
if (現在日時 >= セッション発行日時+有効期間 ) {
$_SESSION=array();
session_destroy();
echo "あなたはだいぶまえにログインしたようですので";
echo "念のためもいっかいログインしなおしてください";
}
みたいなチェックを入れるほうが確実でしょう。
PHP-users メーリングリストの案内