In maart schreef ik over het gevecht met AI-bots: automatische systemen die websites als Open Archieven en Genealogie Online overspoelen met verzoeken. Sindsdien heb ik een nieuwe monitor gebouwd die het verkeer van al mijn websites tegelijk bekijkt, per minuut, per internetadres en per netwerk. Die monitor liet iets zien wat ik al vermoedde, maar nog nooit zo duidelijk had gezien: een flink deel van de “bots” die zich keurig voorstellen, liegt over wie ze zijn.

Wat zijn fake bots?

Een bot (of spider, of crawler) is een programma dat automatisch webpagina’s opvraagt. Bij elk verzoek stuurt een bot een stukje tekst mee dat de User Agent heet. Daarmee zegt het programma wie het is. De bot van OpenAI, die pagina’s verzamelt voor ChatGPT, stuurt bijvoorbeeld deze tekst mee:

Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.4; +https://openai.com/gptbot)

Het probleem: die tekst kan iedereen zelf invullen. Er is geen controle, geen handtekening, niets. Een fake bot is dus een programma dat zich voordoet als een bekende bot, zoals Googlebot of GPTBot, terwijl het daar helemaal niets mee te maken heeft.

Hoe vaak gebeurt dat? Op zondag 1 november 2026 van 14:00 tot 15:00 uur kwamen er op mijn websites ruim een miljoen verzoeken binnen. Daarvan kwamen er zo’n 228 duizend van bots. Ruim 7 duizend verzoeken kwamen van fake bots, afkomstig van 90 verschillende internetadressen. Een paar opvallende cijfers uit dat ene uur:

  • GPTBot (OpenAI): 5.831 verzoeken, en daarvan was er niet één echt.
  • Googlebot: 24.855 echte verzoeken en 480 nepverzoeken.
  • bingbot (Microsoft): 19.114 echte verzoeken en 264 nepverzoeken.

Twee voorbeelden uit de logboeken. Het internetadres 2400:cb00:1235:1000:1884:473:e8b5:e3f1 hoort bij Cloudflare, een Amerikaans bedrijf waar je onder andere rekenkracht kunt huren. Vanaf dat adres kwamen in één uur ruim 2 duizend verzoeken binnen met precies de User Agent van GPTBot hierboven. OpenAI gebruikt Cloudflare echter niet voor zijn bots. Iemand heeft daar dus een eigen programmaatje draaien dat zich als GPTBot voordoet. Toen ik het later weer bekeek, kwam dezelfde bot inmiddels van een ander adres, 2400:cb00:1220:1000:fdcf:73d8:6907:f11.

Nog opvallender is 35.247.235.120, een server die bij Google Cloud in Brazilië wordt gehuurd. Die gebruikte in één uur maar liefst 18 verschillende botnamen door elkaar: Googlebot, bingbot, GPTBot, ClaudeBot, Perplexity-User, Meta-WebIndexer, Baiduspider en nog meer. Vergelijkbare servers deden hetzelfde vanuit Duitsland (34.185.235.76 en 34.141.100.192), Canada (34.186.198.15) en zelfs Nederland (34.6.29.23). Bijvoorbeeld met deze User Agents:

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot

Een programma dat steeds een andere naam probeert, lijkt vooral te testen welke naam ergens doorheen komt.

Wat is het gevaar van fake bots?

Je zou kunnen denken: wat maakt het uit welke naam een bot gebruikt? Het antwoord zit in de maatregelen die ik zelf heb genomen.

In het vorige artikel beschreef ik hoe mijn websites zich beschermen tegen overbelasting. Bezoekers die verdacht gedrag vertonen, krijgen bijvoorbeeld eerst een kleine rekenpuzzel voorgeschoteld die hun browser moet oplossen (een zogenaamde proof of work), of ze krijgen helemaal geen toegang. Voor een mens met een gewone browser merk je daar nauwelijks iets van. Voor een programma dat duizenden pagina’s wil kopiëren, is het een flinke drempel.

Maar zoekmachines moeten mijn websites wel gewoon kunnen bezoeken. Anders zijn de miljoenen pagina’s van Open Archieven en Genealogie Online niet meer te vinden via Google. Daarom slaan mijn websites die extra controles over voor programma’s die zichzelf netjes als bot bekendmaken, en in het bijzonder voor alles wat zich als Google voorstelt.

Daar zit precies het gevaar. Een scraper (een programma dat websites leegkopieert) hoeft alleen maar “Googlebot” of “GPTBot” in zijn User Agent te zetten om langs de beveiliging te komen die juist voor scrapers bedoeld is. De beleefdheid op basis van het “sociale contract” die je bekende bots gunt, wordt zo een achterdeur. En zoals de cijfers hierboven laten zien, wordt die achterdeur actief gebruikt.

Hoe herken je echte bots?

Gelukkig is er een betrouwbaar kenmerk dat een bot niet kan vervalsen: het internetadres (IP-adres) waar het verzoek vandaan komt. Je kunt wel een andere naam opgeven, maar je kunt niet zomaar verzoeken versturen vanaf de computers van Google.

Steeds meer grote partijen publiceren daarom een lijst met de internetadressen die hun bots gebruiken, in een vast formaat dat een computer kan lezen. De regel is dan eenvoudig: de naam en het adres moeten bij elkaar passen. Zegt een verzoek Googlebot te zijn en komt het van een adres op de lijst van Google, dan is het echt. Komt het ergens anders vandaan, dan is het nep.

Ik haal nu elke nacht automatisch de lijsten op van:

  • zoekmachines: Google, Bing (Microsoft), DuckDuckGo en Apple (Applebot);
  • AI-partijen: OpenAI (GPTBot, ChatGPT), Anthropic (Claude), Mistral (Le Chat) en Perplexity;
  • overige: Common Crawl (een open archief van het web dat veel voor AI-training wordt gebruikt) en Ahrefs (een SEO-dienst).

Niet iedereen publiceert zo’n lijst. Meta (Facebook) gebruikt voor zijn bots een eigen netwerk met een eigen nummer (AS32934); alle adressen in dat netwerk kun je opvragen. Voor partijen als Amazon, Yandex en Baidu werkt het anders: daar vraag je bij een internetadres de bijbehorende naam op, en controleer je of die naam bij het bedrijf hoort en weer naar hetzelfde adres verwijst. Dat heet een reverse DNS-controle. Zo bleek de “Amazonbot” die bij mij het meest langskwam, gewoon weer die server in Brazilië te zijn.

Hoe kun je fake bots stoppen?

Mijn eerste neiging was om het hele netwerk van Cloudflare waar die nep-GPTBot vandaan kwam, te blokkeren. Dat is geen goed idee. Cloudflare-adressen worden door duizenden klanten tegelijk gebruikt; morgen zit daar misschien iemands nette RSS-lezer of linkvoorbeeld. En de nepbot was een paar uur later toch al naar een ander adres verhuisd.

Daarom blokkeer ik niet het adres, maar het gedrag: wie zegt een bekende bot te zijn, maar niet van een adres van die bot komt, wordt geweigerd. Een echte bezoeker stuurt nooit de naam Googlebot mee, dus daar heeft niemand last van.

Dat gebeurt met ModSecurity. Dat is een zogenaamde web application firewall: een filter dat in de webserver zelf zit en elk verzoek bekijkt voordat de website er iets mee doet. Per partij staat er één regel in, die in gewone taal zegt: “Noemt het verzoek zich GPTBot en staat het adres niet op de lijst van OpenAI, weiger het dan.” Het verzoek krijgt dan de foutmelding 403 Forbidden terug (letterlijk: “verboden”). Omdat dit vóór de website gebeurt, kost zo’n geweigerd verzoek vrijwel geen rekenkracht.

Conclusie

Het controleren van bots op naam én IP-adres is effectief en goedkoop. De lijsten zijn openbaar, worden elke nacht automatisch bijgewerkt, en een geweigerd verzoek kost de server vrijwel niets. In de controles tijdens het meekijken werd geen enkele echte bot ten onrechte geweigerd. Tegelijk is de achterdeur in mijn eigen beveiliging gesloten: een scraper komt niet meer langs de rekenpuzzel door zich Googlebot te noemen.

Maar, het is geen wondermiddel! Het werkt alleen voor programma’s die zich als een bekende bot voordoen. De grootste belasting komt nog steeds van scrapers die zich voordoen als een gewone browser. Dezelfde monitor vond vandaag bijvoorbeeld een netwerk van zo’n 60 duizend adressen, verspreid over zes hostingbedrijven, dat allemaal precies dezelfde lijst van browsernamen gebruikte. Daarvoor blijven de maatregelen uit het vorige artikel nodig: snelheidslimieten, zware functies achter een login en het blokkeren van hele netwerken (dat netwerk van 60 duizend adressen is inmiddels geblokkeerd).

En net als bij de vorige maatregelen geldt: hier is geen Amerikaanse beveiligingsdienst voor nodig. Alles draait op mijn eigen server, met open source software en openbare lijsten. Elke technisch onderlegde organisatie kan dit ook.