技術ブログこのブログの内容は個人の見解であり、所属する組織の公式見解ではありませんこの広告は、90日以上更新していないブログに表示しています。WebAndroid用のWebサイトを作っていてはまったので、報告します。対象はブラウザ上で動くWebアプリの話で、ネイティブアプリではありません。Googleで検索しても、ネイティブアプリ関連の情報は出てきますがWeb開発の情報が意外とすくなかったので、少しでもお役に立てれば幸いです。概要Android標準ブラウザ(Dolphinブラウザなども含む)で、セキュア属性付きのCookieの挙動がiPhoneのブラウザや、PCのChromeなどと異なります。Cookieやセキュア属性の概要はこちらなどをご参照ください。http://itpro.nikkeibp.co.jp/article/COLUMN/20080221/294407/PCやiPhoneのブラウザの場合、WebサーバがSet-Cookieレスポンスヘッダを返した場合、例え、そのCookieのセキュア属性が設定されていても、ブラウザはそのCookieを受け取ります(通称:食べます)。4.3.4で確認しました。ところが、AndroidのWebブラウザでは、保持しているCookieにセキュア属性が付いている場合、HTTPSによって暗号化されたレスポンス以外ではCookieを受け取りません。2.2)で確認しました。再現コードは以下の通りです。確認するためには、自前でSSL付き(オレオレ証明書でも良い)のアプリサーバを立てることが必要です。falseのように表示されます。falseこのようになります。HTTPSの時だけセキュアなTEST1クッキーが受け取れます。cookieの値が設定されています。falseのように、TEST1とTEST2が異なる値を返してしまいます。実験の結果より、Androidの標準ブラウザでは、HTTPSでしか、セキュア属性付きのCookieは、受け取らないことがわかりました。これにも条件があって、端末側にまだ同じCookieが存在しない場合は、HTTPでもセキュアCookieを食べています。AndroidとiPhoneのブラウザは同じWebkitエンジンを使用していますが、セキュリティーポリシーに違いがあります。したら、PCやiPhoneでも設定を変更するれば動作が変わるかもしれません(未確認)。標準状態で使用している人が多いですから、実質上上記の状態がWebの現状と考えてよいでしょう。考察AndroidのWebに対するセキュリティーポリシーは強力だと言えます。端末やDNSサーバがクラックされて、Webサイトを偽装されたとしても、偽装のリスクがあるHTTP通信によって、より安全な(証明書がある)SSL通信に影響をあたえることができないからです。以前にもChromeで突然JavaScriptのセキュリティを厳しくされて今までのページが動作しないということがありました。(参照させて頂きます:http://blog.bitmeister.jp/?p=1734)Googleのギークたちはセキュリティ対策に非常に厳しい姿勢で望んでいると思います。一部の古いWebサイトを動かなくしたとしても、彼らはWebの安全性を大事にするのでしょう。現在のところは、PC版のChromeでは、今回の挙動はしていませんが、将来のChromeにこのような仕様変更が入ったとしても不思議ではないでしょう。我々はWeb開発者どうしたら良いでしょうか?答えの一つは「もうCookieを使うのをやめよう」ではないでしょうか。HTML5など新しい技術を常に勉強して、セキュリティリスクが少なく、よりリッチで時代に即したサイトやWebサービスを作って行きましょうというのが、彼らからのメッセージなのかもしれません。※こんな精神論を述べるのは、迷ったのですが、最終的に掲載することにしました。お目汚し失礼しました。追記(2012/03/03)半年前のエントリに今頃ブクマコメントがをいただいて驚きました。こんな辺鄙なブログを閲覧いただき誠にありがたく思います。ご指摘を頂いたとおり、Secure属性付きのCookieをWebサーバが送信していることに問題があります。これからWebアプリケーションを開発される際はそのことを厳守するべきです。この望ましくない動作を期待していた古いアプリケーションが実際に存在し、Androidブラウザで動かないということで調査と実証、および対策をしたのが本エントリになります。Android4.xなどでは動作が異なる可能性もあります。「Cookieを使わない」は言い過ぎでした。いわゆるHTML5Webアプリケーションの可能性は感じていますが本件とは直接関係がありません。コメントを頂いた「Cookieを使わない」の具体例については、個人情報などは別にいわゆるAjax経由で取得する方法が考えられます。クロスドメインが使用できるXHR2を利用すれば、アプリケーションサーバと個人情報の格納先を分離することができます。ページ間をまたぐ場合はWebStorageを活用することで、Cookieの代替とすることができます。Cookieと同じようにこちらも攻撃者からの脆弱性を考慮する必要性は存在し、ある程度運用方法が固まったCookieを正しく使うことに比べて、まだリスクがあるかもしれません。MayaaなどRhinoを使っていてハマること。爆速Wordpress立ててみた。参加してきました2014-05-09はてなブログEpicテーマをレスポンシブルしてみた月別アーカイブサイドバー広告大はてなブログをはじめよう!s-ishigamiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。