First Party CookieとThird Party Cookie

Cookieの仕様について調べているが、 どうもFirst Party Cookieと、Third Party Cookieってのがあるらしい。

普通のCookie、表示して表示しているページと同じドメイン(domainAとする)のCookieはFirst Party Cookieというらしい。

それに対して、表示しているページと違うドメイン(domainBとする)のCookieをThird Party Cookieというらしい。 主に広告などでユーザをトラッキングするために使われている様子。

通常、Cookieは、同じドメイン内でしか設定や送信ができないはずなので、 最初は、「表示しているページと違うドメイン」の意味がわからなかった。

よく考えてみると、表示しているdomainAのindex.htmlから、 domainBのscript.jsを読み込むような場合には、同時にdomainBのCookieを設定したり読み込んだりすることはできることがわかった。 domainBのscript.jsを読み込む場合に、「レスポンスのヘッダ」*1Cookieを設定してやればよい。jsじゃなくてもcssとかpngとかでも同じ。

Javascriptで設定するCookieは?

ちなみに、domainB(表示しているページと異なるドメイン)のjavascriptを読み込んで、以下のように実行時にCookieを設定してもThird Party Cookieにはならない。

document.cookie = 'key=secret';

このスクリプトは読み込まれたあとに、domainAで実行される*2ので、First Party Cookieになる。

Third Party Cookieを使ったトラッキング

ここで、Cookieの基本を確認する。

Cookieは設定されたドメインと同じドメインにしか送信されない。 - domainAのCookieはdomainAのリクエスト時にのみ送信される。 - domainBのCookieはdomainBのリクエスト時にのみ送信される。

しかし以下のような場合は、異なるドメインをまたいでCookieが送信されているような状況が起きる。

  • domainAを表示中にdomainBにリクエストする場合は、domainBにdomainBのCookieが送信される。
  • domainCを表示中にdomainBにリクエストする場合にも、domainBにdomainBのCookieが送信される。

こういう仕組みでトラッキングがされている様子。なるほどー。 はてなブックマークのボタンとかGoogle Analyticsのscriptとかそういうのでトラッキングできますね。 CDNとかでもできそう。

ただ、Third Party Cookieへの風当たりは強いようなので、今後は廃止されていくのかも?

*1:ほかにもある?

*2:domainAから読み込まれていても、domainBから読み込まれていても区別されない