あのちっく小屋

サードパーティーCookieとかStorage Access APIとか

2022.08.19
あのちっく

前置き.Cookieの話

CookieはWebブラウザ上でセッションや状態の情報を保持するための仕組み。 Cookieはオリジン(「別のサイト」みたいな意味)ごとに管理されていて、例えばhttps://anochick.comのページではhttps://anochick.comのCookieはアクセスできるが、https://google.comのCookieにはアクセスできない。

そんな事できてしまったら、悪質なサイトが勝手に他のサイトのログイン情報等を盗んだり出来てしまうからね。 殆どのWebサイトがCookieを使って「ログイン状態」を管理している。

話は変わって、Webの世界には「埋め込みコンテンツ」と呼ばれるものがある。

↑これが埋め込みコンテンツの例。これはiframeによる埋め込みコンテンツ。

あなたが今読んでいるこの記事のページは当然youtube.comではないが、埋め込みコンテンツの領域の内側はyoutube.comである。

このページでは、https://anochick.comファーストパーティ、https://youtube.comサードパーティとして扱われる。

このとき、youtubeの埋め込み動画の領域はhttps://youtube.comなので、当然https://anochick.comのCookieにはアクセスできない。

また、同領域はhttps://anochick.comのコンテキストの内側でもあるため、https://youtube.comのCookieはサードパーティCookieとして扱われる。

2022年8月現在の状況として、サードパーティーCookieへのアクセスは、出来ないようになっているブラウザがほとんどとされている。実態として、Safari,FireFoxではサードパーティCookieのアクセスは不可になっている。PC,Android版Chromeはアクセスが可能。Chromeも2024年後半にはサードパーティCookieへのアクセスは廃止予定とのこと

再度延期される可能性もある。

サードパーティーCookieへのアクセスを無制限に許すと、GoogleAdSenseみたいな、いまやあらゆるサイトに設置されているスクリプトを使ってユーザーをめっちゃ追跡できちゃう。これがプライバシー保護の観点であまり良くない。

「個別にオプトアウト出来るんだから許してくれよ。」という気持ちもあるが、とにかくサードパーティーCookieについては"ユーザーの同意無しには完全に"アクセスできないようになっていく。

とはいえ完全にサードパーティCookieが廃止されたら色々と困る。

そこで提案されたのがStorage Access APIというやつ。

Storage Access API

↑のページでの「サードパーティ」「ファーストパーティ」という言葉の使い方に違和感ある。うまく読めてないかも。

Storage Access APIはユーザーに許可をもらうことでサードパーティCookieもアクセス出来るようにするというAPI

まだ提案段階なので色々とふわっとしてる。

Storage Access APIには以下2つのメソッドが含まれる

Document.hasStorageAccess()

これは現在のサイトでストレージへの無制限のアクセス許可がされているかどうかを返す。

document.hasStorageAccess().then(hasAccess => { if (hasAccess) { // アクセス許可されている } else { // アクセス許可されていない } });

とってもシンプル。 ちなみにChromeではdocument.hasStorageAccessundefinedである。 なので、このメソッドを使う前に、Storage Access APIが使えるかどうかをチェックする必要がある。

Document.requestStorageAccess

これはユーザーに、現在のサイトでのアクセス許可を求めるメソッド。

document.requestStorageAccess().then( () => { console.log('access granted') }, () => { console.log('access denied') } );

document.requestStorageAccess()を実行すると、ユーザーへの確認のプロンプトがでたり出なかったりする。これはブラウザやその他コンテキストによる。

「プロンプトが出ないんなら勝手にこの関数実行したらいいじゃん!」と思うかもしれないが、この関数はボタンのonClickに対応するイベントハンドラ関数等、ユーザーの操作によって直接実行される関数からでないと使えない。

なので、「サードパーティクッキーの利用に同意する」ボタンなんかを作って、それを押すとdocument.requestStorageAccessを実行する。というのが想定する正規の使い方っぽい。

この関数を実行して、ユーザーの許可が認められると、サードパーティCookieにアクセスできるようになる。

適当なボタンを押しただけでユーザーが許可したと判断する。というのは結構乱暴な気もしている。

「サイト超えトラッキングを防ぐ」機能

Storage Access APIに近い話として 「サイト超えトラッキングを防ぐ」機能というものがある。 これはITP(Intelligent Tracking Prevention)と呼ばれるユーザーの追跡防止機能のひとつ。

「サイト超えトラッキングを防ぐ」はiOSの設定画面から設定可能で、有効にするとStorage Access APIでユーザーの許可をもらっていようが問答無用でサードパーティクッキーにアクセスできなくなる

ITPによってアクセスは出来ないが、Storage Access APIとしてはアクセス許可を貰っているという状態が生まれる。これが結構気持ち悪い。どう制御したら良いんだ。

ただ、「サイト超えトラッキングを防ぐ」を有効にすると、個別にオプトアウト操作をすること無く、全ての追跡から開放されるので、人によってはすごく便利なのかもしれない。