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.

Ejemplos de hallazgos

serious

Se detectó fingerprinting de canvas

Un script cargado desde cdn.fingerprintjs.com llamó a HTMLCanvasElement.prototype.toDataURL() 3 veces durante la carga de la página. Combinado con lecturas de WebGL y audio-context del mismo script, esto es consistente con fingerprinting determinista del navegador y debería declararse en tu política de privacidad, además de quedar sujeto a consentimiento explícito.

API           : canvas.toDataURL
Llamado por   : https://cdn.fingerprintjs.com/v3/iife.min.js
Cantidad      : 3
Coincide con : webgl.getParameter, audioContext, navigator.plugins
critical

Herramienta de sesión grabada cargada antes del consentimiento

Se cargó e inicializó Hotjar (hotjar.com/c/hotjar-XXXXX.js) antes de que el usuario interactuara con el banner de consentimiento. La grabación de sesiones registra movimientos del mouse, clics, scrolls y entradas de formularios — el EDPB ha sido explícito en que esto es un procesamiento de categoría especial bajo GDPR y requiere consentimiento opt-in, no interés legítimo.

Tracker  : Hotjar (session replay)
Owner    : Contentsquare
Cargado  : t=0.4s (antes de montar el banner)
Categoría: session-replay (alto riesgo)

Fix: difiere las solicitudes a hotjar.com hasta que el usuario acepte la categoría "analytics" o "functional" en tu CMP.
moderate

Sonda de fingerprinting WebGL

Un bundle de first-party lee WebGLRenderingContext.getParameter() con la extensión UNMASKED_RENDERER_WEBGL — que expone el modelo de GPU del usuario. No hay un caso de uso de renderizado para esa cadena en tu app; es una señal de fingerprinting que debería declararse o eliminarse.

API        : WebGLRenderingContext.getParameter
Parámetro  : UNMASKED_RENDERER_WEBGL (37446)
Llamado por : /static/js/main.4f8a2c.js (bundle first-party)
Cantidad    : 1

Esto expone la cadena del renderer de GPU (p. ej., "ANGLE (Apple, Apple M2 Pro, OpenGL 4.1)").

Escanea tu sitio en 60 segundos

25 créditos gratis. Sin tarjeta de crédito. Hallazgos reales en la página que te importa.