DoCoMo iモードブラウザ2.0でCookie
DoCoMoのこの夏モデルから、iモードブラウザ2.0というより高機能なiモードブラウザが搭載されるようになりました。
CookieやCSS,JSなど、大きな違いがありますので、実際に実機で確認をしてみます。
端末は、N-06A を使用します。なんか、発売停止なんてなってますが。。
Cookie
まずは、Cookieについて。
以前、以下のような調査をしたことがあったので、同じ調査をしてみました。
auのSSLでのCookieの挙動がおかしい - maru.cc@はてな
au,SoftBankでSSLでCookieセッションを使用する場合の問題点 - maru.cc@はてな
結果は、問題なく使えます。http<->httpsでの動作、secure属性の挙動も問題ありません。
これを使えば、Cookieセッションでセキュアなサイトがちゃんと作れそうです。
setcookie()の httponly の挙動が動いていない?
phpのsetcookie関数には、httponly という引数があります。
httponly
TRUE を設定すると、HTTP を通してのみクッキーにアクセスできるようになります。 つまり、JavaScript のようなスクリプト言語からはアクセスできなくなるということです。 この設定を使用すると、XSS 攻撃によって ID を盗まれる危険性を減らせます (が、すべてのブラウザがこの設定をサポートしているというわけではありません)。 PHP 5.2.0 で追加されました。 TRUE あるいは FALSE で指定します。
http://jp2.php.net/manual/ja/function.setcookie.php
以下のようなテストコードでテストしてみたところ、httponlyの指定が正常に動いていないように思います。
単にサポートしてないというだけなのかもしれません。
http側ファイル
<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() + 20; setcookie("test",$value,$timeout); setcookie("test".$_SERVER['SERVER_PORT'],$value,$timeout,'/','example.com',false,true); ?> </pre> <hr> <script type="text/javascript"> document.write(document.cookie); </script> <hr> <a href="http://example.com/cookie.php?nocache=<?php echo md5(microtime()) ?>">http</a><br> <a href="https://example.com/cookie.php?nocache=<?php echo md5(microtime()) ?>">https</a><br> </body> </html>
<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() + 20; setcookie("test",$value,$timeout); setcookie("test".$_SERVER['SERVER_PORT'],$value,$timeout,'/','example.com',true); ?> </pre> <hr> <script type="text/javascript"> document.write(document.cookie); </script> <hr> <a href="http://example.com/cookie.php?nocache=<?php echo md5(microtime()) ?>">http</a><br> <a href="https://example.com/cookie.php?nocache=<?php echo md5(microtime()) ?>">https</a><br> </body> </html>
結果は次のようになりました。
http
https
追記(2009-05-28)
どうやらソフトウェアアップデートでJavaScriptが動かなくなってしまったようで、上記の画面キャプチャのような結果にならなくなってしまいました。
JavaScriptの部分が動きません。