[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 メーリングリストの案内