auのSSLでのCookieの挙動がおかしい
auはCookieを使うことが出来る。キャリアの公式情報としても公開されている。
「404 Not Found」
EZweb対応端末においてCookieは、EZサーバに保管されます。
ただし、WAP2.0ブラウザ搭載端末ではEnd to EndのSSL通信時は端末に保管されます。
なお、EZサーバに保管されたCookieはKDDI設備のメンテナンスなどによりリセットされる場合があります。
つまり
ということだ。
これが結構曲者である。
さらに、公式な資料はないけど、端末の挙動から想像するに以下のような挙動をする。
- http領域では、GWと端末の両方のCookieを送ってくる
- http領域で、GWと端末に同じ名前でCookieが設定されている場合、端末のCookieが優先する
- http領域からは、端末のCookieを操作することは出来ない
- https領域では、当然GWのCookieは参照できない
実験
ためしに以下のようなファイルを同一ドメインの http と https
領域に置いて、確認をしてみる。
<html> <head> <meta http-equiv="Pragma" content="no-cache"> </head> <body> <pre> <?php print_r($_COOKIE); $value = "test:".date('H:i:s').' '.$_SERVER['SERVER_PORT']; $timeout = time() + 30; setcookie("test",$value,$timeout); setcookie("test".$_SERVER['SERVER_PORT'],$value,$timeout); ?> </pre> <hr> <a href="http://example.com/?nocache=<?php echo md5(microtime()) ?>">http</a><br> <a href="https://example.com/?nocache=<?php echo md5(microtime()) ?>">https</a><br> </body> </html>
http、https 領域でそれぞれ設定した cookie
をそれぞれの環境で確認してみるというものだ。
Cookie
の有効期限を指定しない場合には、デフォルトで1日になるため、テストのために短めに時間設定をしている。
確認手順
1.http側にアクセス
2.リロード
3.https側へ遷移
4.リロード
5.http側へ遷移(2から30秒以内に)
6.リロード(2から30秒以内に)
7.リロード(2から30秒以降に)
それぞれ次のようになる。
角括弧の中は、アクセスした時間です。
1.[12:00:00]http側にアクセス
Array ( )
2.[12:00:05]リロード
Array ( [test] => test:12:00:00 80 [test80] => test:12:00:00 80 )
3.[12:00:10]https側へ遷移
Array ( )
4.[12:00:15]リロード
Array ( [test] => test:12:00:10 443 [test443] => test:12:00:10 443 )
5.[12:00:20]http側へ遷移(2から30秒以内に)
Array ( [test] => test:12:00:15 443 [test80] => test:12:00:05 80 [test443] => test:12:00:15 443 )
6.[12:00:25]http側へ遷移(2から30秒以内に)
Array ( [test] => test:12:00:15 443 [test80] => test:12:00:20 80 [test443] => test:12:00:15 443 )
7.[12:00:45]リロード(2から30秒以降に)
Array ( [test] => test:12:00:25 80 [test80] => test:12:00:25 80 )
この変な挙動がわかるだろうか?
6の処理の時に、https側の値が書き換えられないので、キーが「test」の値が更新できないでいる。
(追記:7の値が変だったので修正)
問題点
http<->https をまたいで Cookie を、直接使うことはないと思うが、セッションで
Cookieを使用し、問題が出ることが大いにありそうだ。
考えられる可能性として同じセッション名を使っているとして
まとめ
ってか、最近セキュリティ関連の中で、Cookieを使用したセッション使おうよ。みたいなのを目にするけど、どうなのだろうか?
ついでに
SoftBankの場合には、SSL領域では、secure.softbank.ne.jp というドメインが使用されます。
ドメインが違うので、そもそもCookieを引き継ぐことが出来ない。
※メール文面から起動すると、https://example.com/ で開けるけど。
追記
SSLをまたいだセッションで使用する場合の問題点を考えてみました。
「au,SoftBankでSSLでCookieセッションを使用する場合の問題点 - maru.cc@はてな」
追記
docomoの場合も調べてみました
「DoCoMo iモードブラウザ2.0でCookie - maru.cc@はてな」