[PHP-users 33977] クッキーを受け付けないUserAgent(日本のケータイに限らず)に対してもセッション管理しつつセッションハイジャックを防ぎたい

D fj.groups @ gmail.com
2008年 8月 18日 (月) 17:15:37 JST


お世話様です。だいすけと申します。

PHP 5.1.6です。

php.ini では
session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0

にしています。

表題の通りなのですが、クッキーを受け付けないUserAgent(日本のケータイに
限らず)に対しても、
セッション管理しつつセッションハイジャックを防ぎたい
と思っています。


(1)(日本の)ケータイの場合:
調べたところ、
クッキーを受け取らないUserAgentが多く、
その場合、端末固有ID(ただし、imodeの場合は、iモードID。「utn」だと毎回
ダイアログが出てしまう)と
IPアドレス制限によって防ぐのが常套手段だけど、
クッキーを受け取るUserAgentもあるようです。

で、クッキーを受け取るUserAgentの場合はクッキーを使ってセッションIDを管理し
クッキーを受け取らないUserAgentの場合は、get or postでセッションIDを管理
するようにしたいと思っています。

これは、具体的にはどうやって実現できるのでしょうか・・・
デファクトスタンダード的な方法はあるのでしょうか?

●IPアドレス制限のやりかたは分かります。

●で、fingerprintに、端末固有IDの情報を持たせるというのは想像できるのです
が・・・ちがいます?

●UserAgentがクッキーを受け取るか否かの判断方法が分かりません。

●クッキーを受け取らない場合は、セッションスタートの前に、
ini_set("session.use_only_cookies",0);
ini_set("session.use_trans_sid",1);
とする・・・で間違ってないでしょうか?

●セッションハイジャックされていないとわかった時点で、
 session_regenerate_id(TRUE);
するのが常套手段だとは思いますが、
セッションID付きのURLをブックマークされた場合、
そのブックマークからアクセスした場合、そのURL中のセッションIDは無効なので、
セッションが途切れてしまうと思うのですが、どう対応すればいいのでしょうか?

(2)PCの場合

実は、2文字のドメインなのですが、IEのバグで、

Internet Explorer が 2 文字のドメインに対して Cookie を設定しない
(Internet Explorer 6 で、2 文字のドメインに対して SetCookie 関数が機能
しません。 )
http://support.microsoft.com/kb/310676

というものがありまして。。。

これに対応したいと思っています。

やはり、毎回ログインさせて、ずっとpostメソッドで、セッションIDを持ち回る
しか方法はないでしょうか。

ただ、
「この問題は Internet Explorer 6 Service Pack 1 で修正されております。」
とのことなのですが、
どうなんでしょう、今、SPをあててないIE6を使ってる人ってどのくらいなので
しょうか・・・。
割合がすごく少なければ、無視してしまおうとは思っているのですが。


(3)(海外の)ケータイの場合:

(これは今すぐではないですが)海外のケータイにも対応させたいと思っていま
して、
そうするとどうすべきでしょうか?

以上、よろしくお願いいたします。



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