rohaniのブログ

ゆるっと自然言語処理奴。ときどき工作系バイト。

Google ChromeのCookieをSQLite3で見てみた

ネットでの行動を如何様に収集しているか、について読んでいて感じた違和感

たとえば、ジェーンという民主党支持の有権者がいたとする。ジェーンのツイッターには、オバマのウェブサイトへ誘導を促すリンクが送られる。ジェーンが自発的に名前、住所、郵便番号に相当する五桁の"Zip Code"などの基本データを入力すると、ジェーンのコンピュータには「クッキー」が送られ、ジェーンがどのようなサイトを見ているかなどの情報が集積される。 (p.56)

まずこれを読んで、「Cookieって送られるものだっけか」と思った。

それから、「どのようなサイトを見ているかなどの情報」ってフォーム入力を受け付けた程度で取ってこれるものなのかな、ということも疑問に思った。

違和感の正体は「クッキー」の指すものの違いだったみたい

簡単にまとめると、Cookieとは、アクセスされた際にWebサイトのサーバがクライアントに送るテキストデータを、ローカル環境にあるDBに保存しておくというWebブラウザの仕組みの事、もしくは保存されたデータ自体のことを指す。

基本的には、サーバAがクライアントBに保存したデータは、サーバAだけが利用できる仕様なので、サーバCが取得することはできない。

しかし、広告バナー等の埋め込みを利用すると、(バナーが埋め込まれたサイトの)閲覧履歴を取得することができるらしい。

参考: - トラッキングCookie | 日経 xTECH(クロステック) - 2種類のcookie~サードパーティとファーストパーティの違い | マーケティングを支援するDigital Cloud Platform

私が感じた違和感の原因は、「クッキー」をデータそのものではなく仕組みのことだと思って読んでいたことだったと分かった。 また、3rd party製Cookieによるトラッキングの仕組みを知らなかったことにより、見当違いな疑問を抱いていたことも分かった。

実際に見てみた

macの場合、Google ChromeCookie~/Library/Application\ Support/Google/Chrome/Default/Cookiesに保存されている。

sqlite3 Cookies

実際に開いて中身や構造を確かめることができた。

  • creation_utc INTEGER NOT NULL
  • host_key TEXT NOT NULL
  • name TEXT NOT NULL
  • value TEXT NOT NULL
  • path TEXT NOT NULL
  • expires_utc INTEGER NOT NULL
  • is_secure INTEGER NOT NULL
  • is_httponly INTEGER NOT NULL
  • last_access_utc INTEGER NOT NULL
  • has_expires INTEGER NOT NULL DEFAULT 1
  • is_persistent INTEGER NOT NULL DEFAULT 1
  • priority INTEGER NOT NULL DEFAULT 1
  • encrypted_value BLOB DEFAULT ''
  • samesite INTEGER NOT NULL DEFAULT -1

だいたい読めるのだけれど、encrypted_valueが暗号化されていて意味不明な文字列が表示されていた。 軽く調べたら、復号化の方法があるらしい。

Cookieについて調べてみた | エクスチュア総合研究所

蛇足

同じDefaultディレクトリにHistoryという名前のDBがあった。これが所謂閲覧履歴を保存しているDBらしい。

ということは、例えばこのDBを常時バックアップするように工夫すれば、ブラウザで消去ボタンを押してHistoryの中身を空にされても、ひそかに全履歴を集めておくことができるという訳ですね〜()