2020/05〜06 トラッカー判定検証の記録

# 目的：トラッカー判定検証の記録

この検証は、Safari ITP2.3において
トラッカー判定される具体的な条件を調査するため行った。

前提を元に調査した結果を、
今後に活かすため記録することが目的。

# トラッカー判定の前提

英語がわからないので、参考サイトを引用します。
公式では以下のように記載されているとのこと。
実際のこの条件を元にして、実際に判定されるかテスト。

> 当該ドメインがリソース（スクリプトなど）として他のドメインで読み込まれた数
> 当該ドメインがiframeとして他のドメインで読み込まれた数
> 当該ドメインが他のドメインで読み込まれたときの、そこからのリダイレクト（ドメイン）数
> 当該ドメインにアクセスした（親フレームとして読み込まれた）ときに、そこからリダイレクトしたドメイン数（ITP2.0で追加）

引用：ITPの変遷・最新の仕様と挙動の違い／対策の必要性と方法
https://www.marketechlabo.com/itp-latest/#i-2

# 検証準備

### 検証環境

OS: macOS Mojave 10.14.6
browser: Safari Technology Preview Release 108 (Safari 13.2, WebKit 14610.1.16.3)

### 仮想ドメインの登録

検証用のドメインをローカルのhostsに追加。
参考：https://qiita.com/junker919/items/cc15653a681e2dcd79ea

```/etc/hosts
127.0.0.1 tracker.domain
127.0.0.1 redirect.domain
127.0.0.1 test1.domain
127.0.0.1 test2.domain
127.0.0.1 test3.domain
127.0.0.1 test4.domain
```

### ファイル

test1~4/index.html

```bash
<html>
  <head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>test1.domain</title>
  </head>
  <body>
    <h1>test1.domain</h1>
    <!-- パラメーター付きURL -->
    <a href="http://tracker.domain:8001?page_id=test1">
      http://tracker.domain:8001?page_id=test1
    </a>
    <!-- パラメーターなしURL -->
    <a href="http://tracker.domain:8001">
      http://tracker.domain:8001
    </a>
    <!-- iframe -->
    <!-- <iframe src="http://tracker.domain:8001"  width="100" height="100"></iframe> -->
  </body>
</html>
```

tracker/index.html

```bash
<html>
  <head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>tracker.domain</title>

    <script type="text/javascript">
      // Coolie Setting
      // 必要に応じてコメントアウト
      document.cookie = "key=value";
      // Redirect
      // 必要に応じてコメントアウト
      setTimeout(function(){
        location.href='http://redirect.domain:8002';
      }, 1000);
    </script>
  </head>
  <body>
    tracker.domain

    <ul>
      <li>当ドメインをリソース（スクリプトなど）として他ドメインで読み込む</li>
      <li>当ドメインをiframeとして他ドメインで読み込む</li>
      <li>当ドメインを他ドメインで読み込みそこからリダイレクト（ドメイン）する</li>
      <li>当ドメインにアクセスした（親フレームとして読み込まれた）ときにそこからリダイレクトしたドメイン数</li>
    </ul>
  </body>
</html>
```

redirect/index.html

```bash
<html>
  <head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>redirect.domain</title>
  </head>
  <body>
    <h1>redirect.domain tracker.domainからリダイレクトするページ</h1>
  </body>
</html>
```

# 検証方法

### サーバー起動

全てのドメインを個別に php -S で起動させる

```bash
cd src/test1
php -S test1.domain:9001

cd src/test2
php -S test2.domain:9002

cd src/test3
php -S test3.domain:9003

cd src/test4
php -S test4.domain:9004

// 判定されない場合の予備
cd src/test5
php -S test5.domain:9005 

cd src/tracker
php -S tracker.domain:8001

cd src/redirect
php -S redirect.domain:8002
```

### デバッグ方法

Safari Technology Previewを使ってトラッカー判定を確認。
参考： https://qiita.com/pipi0813/items/2952afd4a5cf0d2a0e32

開発タブから
「Enable Intelligent Tracking Prevention Debug Mode」
にチェックを入れ以下のコマンドをターミナルで実行。

```bash
log stream -info | grep ITPDebug
```

実行後各々のサイトに訪問するとトラッキングの状態のログが確認できる。

http://test1.domain:9001
http://test2.domain:9002
http://test3.domain:9003
http://test4.domain:9004
http://test5.domain:9005
http://tracker.domain:8001
http://redirect.domain:8001

# 検証結果総評

単純な画面遷移のみでは、数の問題でトラッカー判定されるまで検証することが難しかった。

iframeによる読み込みによる判定は厳しいようで
ローカル環境のドメインでもトラッカー判定されるまで検証が行えた。

以下はその具体的な検証内容となる。

# 検証内容

以下の条件で、
tracker.domain はどのように判定されるかを検証。
テストは一種類につき二回以上。

**テスト終了後は必ず以下を行う
「Safari Technology Preview > Clear History」
「Develop > Empty Cashes」**

## 当該ドメインがiframeとして他のドメインで読み込まれた数

### テスト１

- 前提条件
 - 全てのテストページで tracker.domain のiframeを読み込んでいる
- テスト内容
tracker.domainへ パラーメーター付きURLで 複数のドメイン（４種） から遷移
- テスト結果
３ドメインまではトラッカー判定無し、4ドメイン目のサイトが遷移した時点でトラッカー判定

### テスト2

- 前提条件
 - test1.domain、test2.domain、test3.domainで tracker.domain のiframeを読み込んでいる
 - test4.domainでは iframeを読み込まない
- テスト内容
tracker.domainへ パラーメーター付きURLで 複数のドメイン（４種） から遷移
- テスト結果
全てのテストドメインから遷移してもトラッカー判定されない

### テスト3

- 前提条件
 - test1.domain で tracker.domain のiframeを読み込んでいる
- テスト内容
test1.domain からパラーメーター付きURLで tracker.domain へ遷移
- テスト結果
遷移してもトラッカー判定されない

### テスト4

- 前提条件
 - test1.domain で tracker.domain のiframeを読み込んでいる
 - tracker.domainはCookieを書き込む処理を行う
- テスト内容
test1.domain からパラーメーター付きURLで tracker.domain へ遷移
- テスト結果
遷移した瞬間トラッカー判定となる

### テスト5

- 前提条件
 - tracker.domainはCookieを書き込む処理を行う
- テスト内容
test1.domain からパラーメーター付きURLで tracker.domain へ遷移
- テスト結果
遷移してもトラッカー判定されない

## 当該ドメインが他のドメインで読み込まれたときの、そこからのリダイレクト（ドメイン）数

### テスト1

- 前提条件
 - tracker.domainはredirect.domainへのリダイレクト 処理を行う
 - test1~4.domain でiframeとして tracker.domainを読み込む
- テスト内容
test1~4.domain 全てのテストドメインそれぞれから tracker.domain へ遷移
リダイレクトされてredirect.domainへ
- テスト結果
４ドメイン目でtracker.domainがトラッカー判定された

※ その後再度test1.domainを閲覧したところ
リダイレクト先の「redirect.domain」もトラッカー判定となった

### テスト2

- 前提条件
 - tracker.domainはCookieを書き込む処理を行う
 - tracker.domainはredirect.domainへのリダイレクト 処理を行う
 - test1~4.domain でiframeとして tracker.domainを読み込む
- テスト内容
test1~4.domain 全てのテストドメインそれぞれから tracker.domain へ遷移
リダイレクトされてredirect.domainへ
- テスト結果
４ドメイン目でtracker.domainおよびredirect.domain
二つのドメインがトラッカー判定された

## 当該ドメインにアクセスした（親フレームとして読み込まれた）ときに、そこからリダイレクトしたドメイン数（ITP2.0で追加）

### テスト1

- 前提条件
 - tracker.domainはredirect.domainへのリダイレクト 処理を行う
- テスト内容
test1~4.domain 全てのテストドメインそれぞれから tracker.domain へ遷移
リダイレクトされてredirect.domainへ
- テスト結果
トラッカー判定されない

### テスト２

- 前提条件
 - tracker.domainはredirect.domainへのリダイレクト 処理を行う
- テスト内容
test1~4.domain 全てのテストドメインそれぞれから
パラーメーター付きURLで tracker.domain へ遷移
リダイレクトされてredirect.domainへ
- テスト結果
トラッカー判定されない

### テスト3

- 前提条件
 - tracker.domainはredirect.domainへのリダイレクト 処理を行う
 - tracker.domainはCookieの書き込み処理を行う
- テスト内容
test1~4.domain 全てのテストドメインそれぞれから
パラーメーター付きURLで tracker.domain へ遷移
リダイレクトされてredirect.domainへ
- テスト結果
トラッカー判定されない


## 当該ドメインがリソース（スクリプトなど）として他のドメインで読み込まれた数

「リソース（スクリプトなど）として」は
iframeを想定し、他のテスト内容と重複するため省略