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

Ryo Hayashi ryo @ spais.jp
2010年 8月 15日 (日) 09:30:42 JST


林と申します。
遅くなりました。すいません。

> これは、IP アドレスのような変化しうる情報に関しては、リクエストのIP アドレスと
> セッションに保持されたIP アドレスが一致しなければ、万が一を考えてセッションを破棄するような処理に
> しておくべきという意味合いですか?

意味は”ログインセッションの認証はリクエスト毎に行うべき”という観点からです。
セッションハイジャックの原因となる運用的な盲点は「ログイン処理が通った
セッションは信頼できる」という間違ったルールからなっています。初めからロ
グインセッションを信頼しておかなければいくつか対策も出てくると思います。
ログインセッションもリクエストパラメータと同じでクライアントに依存した
データですので、信頼は出来ません。そう考えるとセッションがハイジャックさ
れていようがいまいが、どちらにしても毎回認証をすべきです。

> 常にIPアドレスとチェックをしていると、ころころアクセスIPアドレスが変わる
> ケーブルテレビ網などで問題が出やすいとは思います

と、あきらさんが仰る通り一長一短ですので、状況に応じて第三オクテットまで
保存するなど仕様を変えてみる事も視野に入れた方が良いと思います。

本質的な解決ではありませんが、セキュアなリクエストが要求されるシーンでは
再度パスワード等に依る承認を行うなどの方法も検討された方が良いかと思いま
す。つまり、ログインセッションを守るだけではセキュアなセッションは確立で
きません。

> SSL と上記のログインオプションがあれば、問題はほぼクリアされたと言えそうです。

SSL でパケットを暗号化する事は”盗まれる経路を保全する”事であって、これも
本質的な解決ではありません。ドアに強固な鍵を取り付ける事と、盗まれた後の
対策は補完しあう事ができませんのでご注意ください。
つまり、セッションハイジャックへの対策として SSL を導入する事は解決策に
はなりません。
極端な話、共有のパソコンの共有のアカウントにクッキーが残っていた場合、森
さんが仰るセッションハイジャックと同じ状況であり、上記の対策は一つも通用
しない事になりますので、本質的なセッションハイジャックへの対策は「ログイ
ンセッションを信頼しない」という点につきます。


PHP-users メーリングリストの案内