【速報】【検証中】ITP2.3発表!もう我々はITPと戦わず共存するしかないのか
ITP2.3が発表になりましたね。
https://webkit.org/blog/9521/intelligent-tracking-prevention-2-3/
今回のアップデートの大きなところは、「トラッカー判定」されたドメインからのフラグ付き(URLパラメタ)のアクセスについては、ローカルストレージに保管したデータも制限(1週間で削除)の対象になるということ。
ここまで来ると、もう、Safariという戦場でITPと戦うのは止めた方が賢明かと思います。
我々はITPを回避しました!ってトラッカー事業者がドヤ顔でリリース出したり、特許取ったりする度に、ITP親分が怒って口を閉じていく。。
"Unfortunately, we see continued abuse of link decoration, so ITP 2.3 takes two new steps to combat this."
"ITP 2.3 caps the lifetime of all script-writeable website data after a navigation with link decoration from a classified domain."
ただ、重要なのはあくまで複数のサイト間で、トラッカー(3rd Party プラットフォーム)がユーザーを追跡(トラック)するということをブロックすることに焦点を置いているので、ITP2.1のJavaScript経由での1st Party Cookieの有効期限が1週間になるというアップデートほどのインパクトはないかと思います。
繰り返しになりますが、対象は「トラッカー」と「判定」されたドメイン経由の場合です。
あくまで現時点での私の見立てですが、「トラッカー」と「判定」されていないドメイン間のセッションの引継ぎや、ローカルストレージの利用には影響はないという見立てですので、その辺は安心してよいかと思います。
とりあえず、速報ということで検証結果や詳細は後ほど!
ちなみに、以下の記事でITP2.1のスクリプトライタブルな1st Party Cookieの1週間制限を回避するHTTP CookieにHttpOnlyとSecureは要らないと書きましたが、今回、改めて推奨するよ!って言う記述があるのは何かの予言や暗示なのかもしれません。。
【ITP2.1対策】Google Analytics(グーグルアナリティクス/GA)サーバーサイドCookie期限延長にSecure / HttpOnly属性はいらない
https://blogs.itmedia.co.jp/agile/2019/05/itp21_google_analytics_ga_cookie_secure_httponly.html
以下、機械翻訳ですが日本語訳貼っときますねー。
何か、齟齬、誤りがあればコメントください!
iOS 13、iPadOS、および macOS カタリナのベータリリースには、Safari のインテリジェント トラッキング防止 (ITP) のバージョン 2.3 が含まれています。リンクデコレーションによるトラッキングの防止を強化
以前のリリースであるITP 2.2では、クロスサイト トラッキングを目的としたいわゆるリンク装飾の乱用に特に焦点を当てていました。ITP 2.2 では、WEB ページが ITP によって分類されたドメインから移動され、ランディング URL にクエリ文字列またはフラグメントが含まれるとき、そのページで作成された永続的なクライアント側 Cookie の有効期限は 24 時間です。残念ながら、リンクデコレーションの乱用が続いているため、ITP 2.3 はこれに対抗するために 2 つの新しい手順を実行します。
すべてのスクリプト記述可能な Web サイト データの有効期間の上限
ITP 2.2 以降、複数のトラッカーがファーストパーティの Cookie から LocalStorage などの代替ファーストパーティ ストレージへの移行を発表しました。ITP 2.3 は、次の方法でこれを打ち消します。web.example.example は、ユーザーがクロスサイトトラッキング機能で分類されたドメインから、クエリ文字列や web サイトなどのフラグメント識別子を持つ最終 URL に移動した場合、Cookie 以外の Web サイトデータ削除のマークが付けられます。 website.example?clickID=0123456789.
Safariの7日間の使用後、ユーザーがウェブサイト上のウェブページとやり取りすることなく、ウェブサイト.exampleの非クッキーウェブサイトデータはすべて削除されます。
ITPのクライアントサイドクッキーの有効期限が切れたことと共に、この変更により、トラッカーがリンクデコレーションを使用し、長期的なファーストパーティのウェブサイトデータストレージと組み合わせてユーザーを追跡する機能が削除されます。別の言い方をすると、ITP 2.3 は、分類されたドメインからのリンク装飾を含むナビゲーションの後、すべてのスクリプト記述可能なWeb サイト データの有効期間を上限とします。スクリプト書き込み可能なストレージの有効期間を制限する理由は簡単です。サイト所有者は、長年にわたり、サードパーティ製のスクリプトを Web サイトに展開することを確信してきました。現在、これらのスクリプトは、サードパーティのトラッキングに対するブラウザの保護を回避するために再利用されています。ITP 2.3 では、クロスサイトトラッキングの目的でスクリプト記述可能なストレージを使用する機能を制限することで、サードパーティ製スクリプトがこれらの Web サイトで得たストレージ機能を活用できないようにします。
document.referrer は eTLD+1 にダウングレード
私たちの研究では、トラッカーは、宛先ページのリンクを飾るのではなく、独自のリファラーURLを飾document.referrerを通じて追跡IDを読み取ることを発見しました。ITP 2.3 は、参照元にリンク装飾があり、ユーザーが分類されたドメインからナビゲートされた場合に、document.referrerをダウングレードすることによってこれを打ち消します。ユーザーが social.example から website.example に移動し、参照元https://sub.social.example/some/path/?clickID=0123456789しているとします。social.example の web サイト上のスクリプトがdocument.referrerを読んでクリック ID を取得して保存すると、ITPhttps://social.exampleのみが返されることを確認します。
リファラーの誤用とブラウザ全般に対する変更の詳細については、「WHATWG フェッチの問題で参照先ヘッダーの長さを制限する」を参照してください。.
ストレージ アクセス API の更新
開発者の拡張要求
開発者からストレージアクセスAPIの2つの変更を求められており、iOS 13ベータ版、iPadOSベータ版、macOSカタリナベータ版のSafariで提供しています。ユーザーが明示的にアクセスを拒否した場合、つまりユーザーがプロンプトを表示して「許可しない」を選択した場合にのみ、ユーザー ジェスチャ (タップまたはクリック) を使用します。以前は、要求元ドメインが ITP によって分類され、Safari の使用の最後の 30 日間にファースト パーティの Web サイトとしてユーザーの操作を受け取っていない場合など、ユーザープロンプトなしで約束が拒否されたときにもジェスチャが使用されていました。つまり、ユーザーは、サードパーティのサービスにログインするためにポップアップを表示するために、もう一度タップまたはクリックする必要があります。
ITP がオフのときにdocument.hasStorageAccess()をtrueします。document.hasStorageAccess()がfalseを返したが、ITP がオフになったとき、開発者は混乱していました。その場合はtrueを返します。返されたtrueは、Safari のデフォルトの Cookie ポリシーが、まだ Cookie を持っていない場合は第三者のクッキーを拒否するため、第三者が Cookie を設定できることを保証するものではありません。
ユーザー拡張要求
ユーザーから、組み込み Web コンテンツの特定の部分からストレージへのアクセスを求められる回数を制限するよう求められました。一部のサービスでは、ユーザーとの以前のやり取りに関係なく、クリックまたはタップごとにストレージアクセスを要求しています。このような繰り返しプロンプトに対抗するため、WebKit のストレージ アクセス API の実装では、ユーザーがプロンプトで 2 回 「許可しない」を選択したドキュメントに対するストレージ アクセスの要求が自動的に拒否されるようになりました。1 つのプロンプトに制限しない理由は、ユーザーが最初に "許可しない" を選択した結果を見たときに、ユーザーが気が変わる可能性があるためです。
プロンプトの続きの報告を受けた場合は、API をさらに制限します。
macOSカタリナのサファリでITPデバッグモード
macOSカタリナのサファリは今ITPデバッグモードを持っています。かなり前から Safari テクノロジー プレビューで利用できるようになりましたが、通常の Safari でも利用できるため、お客様が使用しているのと同じ Safari で Web サイトをデバッグできます。ITP デバッグ モードの使用方法に関するステップ バイ ステップ ガイドを次に示します。メニューの配置と命名の両方が、以前の実験機能から変更されたことに注意してください。
コンソールを使用する場合:
コンソール アプリを起動します。
[アクション] メニュー → 情報メッセージを含めるをクリックします。
引用符なしで「ITPDebug」にフィルタを適用します。
ターミナルを使用する場合:log stream -info | grep ITPDebug
これで、ITP デバッグ モードを有効にしてログ出力を確認する準備ができました。[Safari 環境設定] → [詳細] → [メニュー バーで開発メニューを表示] を有効にします。
[開発] メニューの [インテリジェント トラッキング防止デバッグ モード] をクリックします。
完了したら、同じ [開発] メニュー項目を使用するか、Safari を終了して ITP デバッグ モードを無効にします。ITP デバッグ モードは、ブラウジングに関する機密情報をログに記録するため、使用していない場合はオンのままにしないでください。(ロギングは一時的な INFO レベルで行われます。
ITP デバッグ モードを有効にすると、Web を参照する場合にログに ITP メッセージが表示されます。ITPがウェブサイトデータの削除をスケジュールすることを決定するたびに、ログに「すべてのデータ」または「すべてのクッキーを除く」が、上記で説明したように、すべてのウェブサイトデータの定期的な削除であるか、またはすべての非クッキーウェブサイトデータの新しい上限寿命であるかどうかを示します。ドメイン3rdpartytestwebkit.orgは ITP デバッグ モードの追跡機能で永続的に分類されます。
テスト用のカスタム ドメインの分類
ITP デバッグ モードとユーザーの既定値を使用すると、カスタム ドメインを追跡機能で永続的に分類するように手動で設定できます。Web サイトと呼ばれるドメインでこれを実現する方法は次のとおりです。システム環境設定を開き、[セキュリティとプライバシー] をクリックし、南京錠のロックを解除して変更を加えます。
左側の [ディスク全体アクセス] カテゴリを選択します。
+ボタンを使用してターミナル アプリケーションを一覧に追加し、チェックボックスがオンであることを確認します。
ターミナルを開き、次のコマンドを実行する:defaults write com.apple.Safari ITPManualPrevalentResource website.example
[システム環境設定のセキュリティとプライバシー] に戻り、ターミナルのチェックボックスをオフにして、ディスク全体の永続的なアクセスを許可しないようにします。
HttpOnly クッキーに関する注意事項
ITP 2.1に関するブログ記事では、Cookie を保護する方法に関するガイダンスを提供しました。セキュアクッキーとHttpOnlyクッキーの使用を特に奨励します。.その投稿を公開して以来、HttpOnly クッキーという用語に関して混乱が生じ、時には「HTTPクッキー」だけに短縮されることがあります。サーバーが HttpOnly クッキーとして設定した Cookie と言う人もいます。それは間違っている。サーバーは、Set-Cookie 応答ヘッダーに HttpOnly 属性を追加して、Cookie を HttpOnly にする必要があります。
Set-Cookie: ExampleSessionID=a66e30012cc49846; path=/; HttpOnly
HttpOnly 属性を追加すると、次の 2 つのセキュリティ保護とプライバシー保護が提供されます。HttpOnly クッキーはJavaScriptに公開されません。つまり、Web サイト上のスクリプトやクロスサイト スクリプティング攻撃を追跡することは、これらの Cookie の内容を読み取ったり漏洩したりすることはできません。
HttpOnly クッキーは、WebKitのウェブコンテンツプロセスにコピーされません。これは、彼らがそうでなければ、これらのクッキーの内容を盗む可能性がある投機的な実行攻撃のために手の届かないことを意味します。