Skip to content

Pillar 3 of 4

Hunt down trackers your tag manager forgot about

A real browser, real network interception, and a full set of fingerprinting API hooks. We catch the trackers everyone catches — and the ones nobody else does.

The fingerprinting that hides in plain sight

Privacy laws are catching up to fingerprinting. Cookie-style consent banners don't help, because fingerprinting doesn't write a cookie — it reads stable browser characteristics to identify you. Most scanners can't see this. We inject a small init script before any of your page's JavaScript runs. It wraps the four APIs most commonly used for fingerprinting and counts every call. If your site loads a third-party script that probes the canvas to derive a hardware-specific image hash, we'll see exactly which script and how many times. This is how The Markup's Blacklight project works, and it's the only reliable way to detect fingerprinting from outside the running script.

Network interception, done right

We listen to every outbound request from page load through 4 seconds of scrolling, so trackers triggered by lazy-loaded content (the ones that fire when the user reaches a chat widget or product card) aren't missed. First-party vs third-party is determined by registrable domain comparison — a request to cdn.example.com from example.com is correctly first-party, whereas px.facebook.com is third-party even if loaded from a same-name subresource. Each request is recorded with its category, owner organization, and known-tracker name where applicable.

Why classify? Because counting matters less than naming

Telling a customer "your site loads 47 third-party requests" is a number without action. Telling them "your site loads Hotjar (session replay), Mixpanel (analytics), and Meta Pixel (advertising) before consent" is a punch list. Every known tracker comes with the owning organization so your privacy team has the right vendor to negotiate with.

指摘の例

serious

Canvasフィンガープリンティングが検出されました

cdn.fingerprintjs.com から読み込まれたスクリプトが、ページ読み込み中にHTMLCanvasElement.prototype.toDataURL() を3回呼び出しています。同じスクリプトによるWebGLおよびaudio-contextの読み取りと組み合わさっており、決定論的なブラウザフィンガープリンティングと整合します。プライバシーポリシーに開示し、明示的な同意の後ろに切り分けるべきです。

API           : canvas.toDataURL
Called by     : https://cdn.fingerprintjs.com/v3/iife.min.js
Call count    : 3
Co-occurs with: webgl.getParameter, audioContext, navigator.plugins
critical

同意前にセッションリプレイツールが読み込まれています

Hotjar(hotjar.com/c/hotjar-XXXXX.js)が読み込まれ、ユーザーが同意バナーとやり取りをする前に初期化されています。セッションリプレイはマウスの動き、クリック、スクロール、フォーム入力を記録します。EDPBは、これはGDPRにおける特別カテゴリの処理であり、正当な利益ではなくオプトイン同意が必要であると明確にしています。

Tracker  : Hotjar(セッションリプレイ)
Owner    : Contentsquare
Loaded   : t=0.4s(バナーマウント前)
Category : session-replay(高リスク)

Fix: ユーザーがCMPで「analytics」または「functional」カテゴリを選択するまで、hotjar.comへのリクエストを遅延させてください。
moderate

WebGLフィンガープリンティングのプローブ

ファーストパーティのバンドルが、UNMASKED_RENDERER_WEBGL拡張を伴ってWebGLRenderingContext.getParameter() を読み取っています。これはユーザーのGPUモデルを公開します。アプリ内でこの文字列をレンダリング用途で使うケースはありません。フィンガープリンティングのシグナルであり、開示するか削除するべきです。

API        : WebGLRenderingContext.getParameter
Parameter  : UNMASKED_RENDERER_WEBGL (37446)
Called by  : /static/js/main.4f8a2c.js(ファーストパーティバンドル)
Call count : 1

GPUレンダラー文字列(例:「ANGLE (Apple, Apple M2 Pro, OpenGL 4.1)」)を公開します。

60秒でサイトをスキャン

無料クレジット25。クレジットカード不要。気になるページの実際の指摘が手に入ります。