改めてiOS9のCookie設定を検証|SFSafariViewController

改めてiOS9のCookie設定を検証|SFSafariViewController

最近、トラッキング広告、いわゆる追跡バナーの話題をよく耳にしませんか?

トラッキング広告とは、WEBサイトを閲覧した個人(ここではブラウザ)を識別して、過去の履歴などからその人に最適化された広告のことです。

最近閲覧した車の情報が、別のページに広告として出てくることありませんか?
あれです。あれがトラッキング広告です。

このトラッキング技術はサイトとアプリの連携にもよく利用されています。

そしてトラッキング広告を実現するための技術の一つとしてCookieがあります。
Cookieは最もよく使われるユーザトラッキングの手法で、アクセス解析やサイトとアプリの連携解析も、これで行っています。

先日、待望のiOS9正式版がリリースされSFSafariViewControllerも実装されましたので、改めてCookieの設定について検証&再学習してみました。

Cookieの種類とSFSafariViewController

本題に入る前に、まずはCookieの種類について簡単におさらい。

Cookieにはアクセスしたサーバーの情報しか読み書きできないファーストパーティCookieと、他のサイトが発行権を持つサードパーティCookieがあります。

それぞれは厳格に区別されていて、他のサイトのCookieを外部からユーザの許可なく取得することは基本できません。これをできてしまう状況を脆弱性といい、各ブラウザの対策課題です。実際、そうした問題も発生しています。

Google Analyticsの場合、安全性を高めるために他のサイトが共有可能なサードパーティCookieは使用されません。解析ツールであってもファーストパーティで発行される場合、その対象ドメインを経由することなくCookieを参照することはできなくなります。

参考:GoogleAnalyticsのCookieは、なぜサードパーティCookieではなく、ファーストパーティCookieなのか?(※図がわかりやすいです。)

mobile Safariでも未訪問のサードパーティCookieはブロックする仕様がデフォルトで設定されています。

iOS9ではSFSafariViewControllerが実装されたことによりアプリ側からのCookie共有も容易になりました。
よって、Safariと共有するCookieのあり方も、より重要になってきます。

今回はこれを踏まえた上での検証となります。

Cookieを利用した書き込みレベルの検証

http://xx.xx.xx.135/のページにiframeでhttp://xx.xx.xx.152/を埋め込み、それぞれのページでcookieを書き込む検証をしてみたいと思います。

http://xx.xx.xx.135/3rd.html

http://xx.xx.xx.152/3rd.html

cookieの設定をする

[設定] > [safari] > [Cookieをブロック] とすすみCookieの設定をします。

image13

デフォルトでは「訪問したWebサイトを許可」になっています。

常に許可で検証

Cookieの設定を「常に許可」に変更して、xx.xx.xx.135にアクセスした結果をPC版safariのインスペクタで確認します。

■ xx.xx.xx.135ドメインのCookie

image03

いわゆるファーストパーティーのCookieです。
問題なく書き込みができています。

■ xx.xx.xx.152ドメインのCookie

image07

いわゆるサードパーティーのCookieです。
こちらも問題なく書き込みができています。

訪問したWebサイトを許可

続いてCookieの設定を「訪問したWebサイトを許可」に変更します。

■ xx.xx.xx.135ドメインのCookie

image03

■ xx.xx.xx.152ドメインのCookie

image07

xx.xx.xx.152のドメインは先ほど訪問しているので、Cookieの書き込みができています。
(キャプチャに変化がないですが、新しく書き込んでいるのですよ)

アクセス中のWebサイトのみ許可

続いてcookieの設定を「アクセス中のWebサイトのみ許可」に変更します。

■ xx.xx.xx.135ドメインのcookie

image03

■ xx.xx.xx.152ドメインのcookie

image09

やっと変化がありました。
現在アクセスしているのはxx.xx.xx.135ドメインであって、xx.xx.xx.152ドメインではないため書き込みができていません。
サードパーティーcookieの書き込みが防がれています。

常にブロック

続いてcookieの設定を「常にブロック」に変更します。

■ xx.xx.xx.135ドメインのcookie

ブロックしているのでファーストパーティーcookieの書き込みもできません。
当然サードパーティーcookieはもってのほかです。

image11

結果は見ての通り想定した結果となりました。

訪問したWebサイトを許可の追加検証

訪問したことのあるドメインであればiframe経由でもcookieが書き込まれることがわかりました。
では一度訪問してからcookieを削除し、再訪問してみましょう。

一度、履歴を全て削除します。
[設定] > [safari] > [履歴とWebサイトデータを消去]

coooki設定を[常に許可]に設定し、xx.xx.xx.135にアクセスします。
xx.xx.xx.152ドメインのCookieも書き込みされています。

image07

xx.xx.xx.152ドメインのCookieを削除します。

coooki設定を[訪問したWebサイトを許可]に設定し、xx.xx.xx.135にアクセスします。
今度はxx.xx.xx.152ドメインのCookieは書き込みされませんでした。

image09

まとめ

結果はiOS8でのCookieの扱いと、iOS9でのCookieの扱いに変化はありませんでした。

そもそもトラッキングを嫌う動きが活発になってきていますが、現時点では「訪問したWebサイトを許可」がiPhoneのデフォルトなので、その範囲であれば情報収集も可能です。

SFSafariViewControllerが実装されたことにより、トラッキングはユーザビリティが損なわず、プライバシー侵害にならないレベルでCookieの仕様をしっかり把握してやっていただきたいと思います。

また、いかに多くのドメインにCookieを書き込めるかが広告トラッキングのキーであることもiOS9でも変わらないようです。

よって、Cookieを読み書き送信処理すらブロックするコンテンツブロッカーの登場で「アプリのトラッキングは楽になったが、ブラウザのトラッキングは困難になった」状況をいかに打破するかが、当面の課題になりそうです。

コメント