🇬🇧 🇳🇱 🇫🇷 ℹ️

BeLibre

Digitale Autonomie

BeLibre

BeLibre Leak Detector: Wat je website aan vreemden vertelt over je bezoekers

Een paar mooie nieuwe sokken bij mijn nieuwe outfit. Dat is wat ik nodig heb om het af te maken! Ik surf naar een Belgische webshop gespecialiseerd in sokken en met een uitstekende reputatie. Een collega raadde hem aan, ik was er nog nooit geweest. Ondanks het verleidelijke assortiment besluit ik niets te kopen. De mooiste zijn uitverkocht in mijn maat. Als ik mijn tabblad sluit, heb ik geen idee dat zo’n tien bedrijven te horen kregen dat ik besta, en wat mijn zwakke plekken zijn. Meerdere zijn niet eens Europees.

En weet je wat? Die grote Amerikaanse kennen me blijkbaar al een tijdje. Google en Meta reden al een groot stuk van mijn voorbije week mee; hetzelfde handjevol bedrijven zat stilletjes op de meeste sites die ik bezocht. De sokken zijn niet het hele verhaal. Er was het parfum waar ik gisteren naar keek, de kapper die ik voor volgende dinsdag boekte, het tafeltje voor twee bij dat gezellige zaakje om de hoek. Elk van die bezoeken op zich is een detail. Aan elkaar geregen over duizenden sites die allemaal dezelfde paar bedrijven bellen, wordt het een vrij compleet beeld van mijn leven, samengesteld door firma’s waar ik geen enkele band mee heb en die ik niet kan opbellen om te vragen wat ze over me bijhouden.

Het aandeel van Meta is nog intiemer, want de pixel op de webshop koppelt dit bezoek aan mijn sociale account, met mijn echte naam en vrienden. Op hun platform registreren ze wat ze willen: waar ik stopte met scrollen en bleef hangen, het bericht dat ik begon te typen in een venster en dan wiste voor ik het plaatste, elke foto waar ik lang genoeg op bleef hangen om te liken. Ik wil me niet afvragen wat ze al weten en afgeleid hebben over mij, en wat de sokken daar nog bovenop vertellen.

Ik kan het de winkelier niet kwalijk nemen. Hij wilde gewoon de inzichten, en Google en Meta bieden die gratis aan. Hij beseft niet wat hij over zijn klanten prijsgeeft. Hij is geen IT’er, hij wil gewoon goeie sokken verkopen aan veel mensen. En een eerlijke boterham verdienen.

Dus: kan ik iets doen om meer inzicht te krijgen in wat er op een site gebeurt? Is er iets dat ik de eigenaar van de sokkenwinkel kan vertellen?

Wel, er is een nieuwe tool van BeLibre, en de code staat op Codeberg. Dit artikel legt uit wat hij doet, wat je ermee kan, en het belangrijkste: hoe je de resultaten interpreteert.

# Wat hij doet, in één adem

Je surft normaal naar een website. De tool neemt de sessie op, speelt ze daarna voor je af en rapporteert precies welke derde partijen gegevens over het bezoek ontvingen, en wat voor gegevens dat waren. Zie je iets dat het bewaren waard is? Met Alt-Ctrl-S dump je een schermafbeelding in je capture.

Het rapport bestaat uit drie lagen. Bovenaan een samenvatting die de bevindingen rood, geel of groen scoort en je per stuk vertelt wat eraan te doen. Daaronder een opsplitsing per leverancier. Daaronder een detailweergave per request, voor wie de bewijsstukken wil zien.

Twee dingen maken hem meer dan een trackerteller. Ten eerste krijgt elke leverancier die hij vindt een label met zijn rechtsgebied en zijn blootstelling aan extraterritoriale wetgeving, zodat een Amerikaanse analytics-aanbieder gemarkeerd wordt tegenover de CLOUD Act, FISA 702 en het Schrems II-arrest. Het resultaat leest als een audit van digitale soevereiniteit, niet zomaar een lijstje cookies. Ten tweede vangt hij de gevallen die zich verbergen: trackers vermomd achter hostnamen die op een eerste partij lijken, cookies met een levensduur die je in presidentstermijnen meet, en identifiers die een bezoeker stilletjes van site naar site volgen.

Hij kijkt ook voorbij de browser, naar de achterkant. Naast de paginacapture inspecteert hij een hele hoop technische gegevens (DNS): waar de gezaghebbende naamservers staan, welke provider de inkomende mail afhandelt, of de zone DNSSEC-ondertekend is, of DMARC vervalste mail echt tegenhoudt of er alleen naar kijkt, en welke leveranciers de site stilletjes heeft toegegeven te gebruiken via zijn DNS-records. Een winkel kan zijn pagina’s in België hosten en toch zijn analytics, zijn mail en zijn DNS via providers op een ander continent laten lopen. Het rapport toont beide helften.

Er is ook een bulkmodus om in één keer een hele lijst websites te scannen, daar komen we nog op terug.

De tool is uitgebracht onder de GPLv3. Wil je precies weten hoe de worst gedraaid wordt, dan staat de broncode er klaar en mag je elke regel nalezen.

# Installeren

We drukken de installatiestappen hier niet opnieuw af, want de README doet dat al goed en niemand leest installatieproza voor zijn plezier. Je hebt Python nodig en een recente Firefox. De rest is drie commando’s en een koffie.

# Gebruiken: vier dingen om te proberen

Hier wordt het interessant. Vier manieren om hem op de wereld te richten.

# 1. Je favoriete webshop

Begin met de sokkenscène van hierboven, maar nu met het rapport open. We lieten hem los op een echte Belgische sokkenwinkel, surften zo’n tachtig seconden rond en kochten niets.

Het eerste commando helpt je de capture aan te maken. Op het moment dat je het venster sluit, wordt de capture op de opgegeven locatie bewaard:

python -m leak_inspector capture https://example.com --out captures/example.zip

Het volgende commando genereert een rapport. De uitvoer kan text, html, markdown_summary of markdown_detailed zijn, of zelfs json als je het in een volgende tool wil verwerken. Het wordt bewaard in het bestand report.html:

python -m leak_inspector analyze captures/example.zip --format html > report.html

Hier een voorbeeld van de ingekorte samenvatting van ons sokkenexperiment:

VERDICT
  10 external vendors contacted. 11 personal-data fields observed leaving
  via 4 trackers: Google Ads / DoubleClick, Google Analytics 4,
  Google Tag Manager, Meta (Facebook) Pixel.
  Nothing requiring action was found.

KEY FINDINGS — WEBSITE
  🔴 1 persistent cross-site tracking cookie set. Vendor: Google Ads / DoubleClick.
  🔴 2 vendors under extra-territorial jurisdiction. 2× 🇺🇸 US (Google, Meta).
  🟡 4 unclassified third-party hosts.

KEY FINDINGS — BACK-OFFICE
  🟡 Authoritative DNS hosted under extra-territorial jurisdiction. 🇺🇸 US (Cloudflare).
  🟡 Inbound mail handled by an extra-territorial provider. 🇺🇸 US (Google).
  🔴 4 third-party SaaS relationships self-disclosed via DNS. US: Google, Meta.

Dit is het rapport van een nette, deskundig gerunde winkel, niet vergeven van honderden trackers of zelfs een schermrecorder. De website wordt in Nederland gehost, dus mooi binnen de EU. Naar de maatstaven van commercieel surfen gedraagt hij zich goed.

En toch: Zijn analytics, zijn advertentiepixel, zijn inkomende mail en zijn DNS vallen allemaal onder Amerikaanse jurisdictie. De winkel besliste dit vrijwel zeker niet bewust. Iemand voegde jaren geleden Google Tag Manager toe en die bracht vrienden mee, de mail ging naar Google omdat iedereen dat doet, en de DNS belandde zonder nadenken bij Cloudflare. Niets daarvan is kwaadaardig. Het is allemaal precies het soort stille standaardkeuze die een soevereiniteitsaudit bestaat om zichtbaar te maken. Dat is de echte les van de sokkenwinkel: de lekken zijn niet dramatisch, ze zijn doodgewoon, en doodgewoon valt moeilijker op.

# 2. Je school of je werkgever

Richt hem nu op een site die je min of meer verplicht gebruikt. Een schoolportaal, het personeelsintranet, het platform waar je kind elke dag op inlogt.

De bevinding lijkt vaak op die van de webshop. Het verschil is de machtsverhouding. Je kan stoppen met winkelen bij een webshop. Je kan je kind niet echt beletten het huiswerkplatform te gebruiken dat de school koos. Dat maakt dit het ongemakkelijke geval, en het nuttige.

Het is, vriendelijk gezegd, de moeite om op te merken dat een footer met “wij nemen je privacy ernstig” en een inlogpagina die veertien Amerikaanse trackers laadt nog voor je iets getypt hebt, elkaar niet uitsluiten. Ze gaan voortdurend samen. De tool maakt gewoon de tweede helft zichtbaar.

# 3. Elke school in je gemeente

Eén rapport is een anekdote. Dertig rapporten zijn bewijs.

Daar dient de bulkmodus voor. Geef hem een lijst van elke schoolwebsite in je gemeente, laat hem draaien, en kom terug bij een gerangschikt overzicht: wie het minst lekt, wie het meest lekt, en welke trackers over de hele set opduiken. Plots klaag je niet over één site, maar heb je een vergelijking in handen die je kan voorleggen aan een schoolbestuur, een gemeenteraad, of een journalist die net naar zulke concrete cijfers op zoek was.

Dit is de BeLibre-pleitbezorging in het klein. Soevereiniteitsargumenten verdrinken vaak in abstractie. Een tabel die zegt “negen van de twaalf scholen in onze gemeente sturen leerlinggegevens naar dezelfde Amerikaanse leverancier” brengt een heldere boodschap.

# 4. Cookies uit, dan cookies aan

De laatste is minder een toepassing dan een truc die de tool in een experiment verandert.

Bezoek een site en weiger alle cookies. Neem het op. Bezoek dezelfde site opnieuw, aanvaard alles, en neem het een tweede keer op. Vergelijk nu de twee rapporten.

Wat je eigenlijk test, is of de cookiebanner überhaupt iets doet. Soms is de “weigeren”-capture geruststellend leeg en doet de banner zijn werk. Soms zijn de twee rapporten zo goed als identiek, wat betekent dat de tracking al afging voor je ook maar geklikt had, en de banner louter decoratie was. Dat tweede resultaat komt vaker voor dan zou mogen, en het is precies het soort bevinding waar een gegevensbeschermingsautoriteit om geeft.

Om die twee gevallen te vergelijken, bekijk je het diff-commando in de README.md. Dit is wat technischer, maar als je je door de eerste oefeningen worstelde, lukt dit ook wel.

Welk geval je ook draait, de tool kan het rapport weergeven als gewone terminaltekst, als HTML met tooltips, als JSON om in iets anders in te voeren, of als markdown om te delen. En het weerspiegelt altijd de sessie die je werkelijk opnam, inclusief je cookiekeuzes. Het rapporteert wat er gebeurde, niet wat er had moeten gebeuren.

# De resultaten lezen zonder jezelf de stuipen op het lijf te jagen

De tool reikt je bewijs aan, maar daarmee nog geen conclusie. En het grootste risico bij het gebruik is dat je het in de verkeerde richting leest: in paniek schieten bij een rode vlag die een leverancier blijkt te zijn waar je al een contract mee hebt, of de schouders ophalen bij eentje die er wel degelijk toe doet.

Wat achtergrond dicht die kloof. Je hebt geen rechtendiploma nodig, maar een paar dingen helpen:

  • De kleurscores meten wat er op de lijn werd waargenomen. Het zijn vuistregels, geen juridisch advies.

  • Er is een wezenlijk verschil tussen een stuk persoonsgegevens (je IP, een gehasht e-mailadres), een identifier die je bezoeken aan elkaar koppelt, en gewone technische ruis. Ze wegen heel anders onder de GDPR, en het rapport maakt het onderscheid.

  • “Leverancier in de VS” is een zin met juridische gevolgen. Het is een verkorting voor een geheel aan wetgeving (FISA 702, de CLOUD Act, en de redenering achter Schrems II) die gegevens bij Amerikaanse bedrijven kan opvragen, ongeacht waar de server staat. Daarom is een Amerikaanse vlag in het rapport niet hetzelfde als een Belgische.

  • CNAME-cloaking is een tracker met een valse snor die zich voordoet als eerste partij. Een hostnaam als stats.jouwschool.be ziet er lokaal en betrouwbaar uit, en wijst dan stilletjes door naar de infrastructuur van een leverancier elders. De tool ontmaskert het; gewone blokkeerlijsten en snelle code-reviews missen het meestal.

  • Session replay en analytics zijn verschillende instrumenten. Het ene telt bezoeken, het andere neemt ze op als een camera over je schouder. Alleen die opname sleept een formele effectbeoordeling (GDPR artikel 35) achter zich aan.

  • Een niet-geclassificeerde host is niet hetzelfde als een schuldige. Het betekent enkel dat nog geen detectiemodule hem herkende. In het rapport van de sokkenwinkel waren de vier niet-geclassificeerde hosts een marketingautomatisering-SDK die een nadere blik verdient, een endpoint van Google Analytics, het Apple Pay-script, en de eigen zustersite van de winkel die een productfoto serveerde. Sommige daarvan verdienen verder onderzoek. Andere zijn ruis. Het onderscheid maken is het werk, en een host die hier opduikt is een goede reden om een issue te openen, zodat de volgende niet hoeft te gokken.

Tot slot de blinde vlekken. De grootste is server-side tagging: wanneer een website gegevens in de browser verzamelt, ze naar zijn eigen server stuurt en ze van daaruit doorstuurt, raakt die laatste stap de browser nooit en kan de tool het niet zien. Wat op de lijn schoon lijkt, kan langs de achterdeur nog steeds een leverancier voeden. De DNS- en mailcontroles vangen daar onrechtstreeks iets van op, maar een vastberaden server-side opzet blijft per ontwerp onzichtbaar.

Als een bevinding vragen oproept, zoek je verduidelijking. De online community van BeLibre is daar de perfecte plek voor: echte mensen, met aanzienlijk minder trackers dan de geteste website.

# Probeer het op iets waar je om geeft

Dus of je nu de sokken koopt of verkoopt: deze tool helpt je beter begrijpen wat er vlak onder je neus en onder de motorkap van je browser gebeurt. De Leak Detector uitproberen kost je maar een paar minuten.

Uitgebracht onder de GPLv3: ♥️ draai hem ♥️ bestudeer hem ♥️ deel hem ♥️ verbeter hem ♥️