2010年8月21日

[PHP-users 35337] Re:セッションハイジャックと session_regenerate_id() について

森です。林さん、コメントありがとうございます。

> 僕の言っている認証は「そのリクエストがセッションを維持できる条件に合致し
> ている事の評価」ですので、いわゆるパスワード認証などとは別のものです。

> セッションハイジャックは「複数のリクエスト中維持されるデータ」を盗用する
> 事にありますので、盗用されているかどうかをリクエスト毎に評価する必要があ
> ります。


> この評価をさして僕は”認証”と表現しました。
> ちょっとわかりにくいかもしれませんが、タイムアウトも広義には認証です。要
> するにエンドユーザーの受動的行動に限らず、正当性評価の手法として認証があ
> ると考えてもらった方がわかりやすいかもしれません。

タイムアウトによって、再度ログインを促すような処理は、たとえ正規の
ユーザーであっても、一定時間を経過すればセッションをリセットすることで、
より安全にするための方法かと思いました。
現時点では、IPアドレスやユーザーエージェント等のチェックも、正当性評価の
ためのチェック項目として利用できるという理解です。

更に別の角度からもチェックしなければ、正当性の評価としては不十分でしょうか?
セッションクッキーとは別にクッキーを用意し、そのクッキーと $_SESSIONに
ワンタイム・トークンのようなデータをセットしておき、毎回照合する、等
考えてみたのですが、他にありましたら、教えてもらえますか?
※言われているポイントを私がまだ理解していない可能性もあります。


いろいろな方からのコメントを踏まえ、現時点では概ね次のように考えています。

■ログイン時の処理
・ユーザーID、IPアドレス、ユーザーエージェント等、ユーザーを識別する
 ための情報を $_SESSION にセットする。

■ログイン後、リクエスト毎の処理
・ログイン時に $_SESSION にセットされたはずの情報がセット
 されてない場合はセッションを破棄する。
・$_SESSION と $_SERVER の情報(IP 等)を比較し、異なった場合は
 セッションを破棄する。
・タイムアウト処理: 正規ユーザーであっても一定時間経過すれば再度
 ログインしてもらう。また、共有PC 等で、IP アドレス等による判定が
 不可能な場合でも、ある程度安全が確保できると思われる。ただし、
 あまり短いとやや利便性が損なわれるので、検討中。
・セッションID の再セット: session_regenerate_id(true)。

■その他
・重要な処理に関しては、その都度パスワードを入力してもらう。
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年8月21日 19:41
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/97848
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。