Wenn der eigene Bot-Schutz Sie aussperrt
Was wir in einem Nachmittag mit Vercel BotID gelernt haben — inklusive dem Moment, an dem unser eigenes Smoke-Test-Script 403'te.
Es ist eine eigentümliche Form von Validierung, wenn der eigene Bot-Schutz einem den Zutritt verweigert. Heute Nachmittag haben wir Vercel BotID nicht nur eingeführt, sondern in einem ungeplanten Live-Drill auch gleich getestet — gegen uns selbst.
Was wir geshipt haben
Drei Routen sind ab sofort BotID-gated:
POST /api/contact— KontaktformularPOST /api/newsletter— Newsletter-SignupPOST /api/chat— der AI-Chat-Endpoint, jeder Call ist ein billable Gateway-Aufruf
Plus <BotIdClient protect={...}> im Root-Layout, damit der Client tatsächlich Interaktions-Signale (Maus, Tastatur, Scroll) auf Outbound-Requests anhängt. Ohne diese Komponente fällt das System auf reine Server-Detection zurück (UA + Header) — gut gegen primitives, leicht zu umgehen von headless Chrome.
Der Plot-Twist
Nach dem Deploy wollten wir verifizieren, dass die neuen Changelog-Einträge live sind. Klassisches Smoke-Test-Skript:
node -e "fetch('https://nex-soft.com/changelog').then(r => r.text()).then(html => console.log(html.includes('8. Snapshot')))"
Antwort:
403 — x-vercel-mitigated: challenge
Unser eigenes Verifikations-Script wurde von unserem eigenen Bot-Schutz blockiert. Sekundenlanges Stutzen. Dann: laute Freude. Das ist genau das, was wir gebaut haben.
Warum das die richtige Reaktion ist
Vercel Firewall + BotID unterscheidet nicht zwischen „böser Bot" und „mein eigenes Smoke-Test-Skript". Aus Sicht der Detection-Engine sehen beide gleich aus: kein Browser, keine Maus-Bewegung, keine BotIdClient-Signale, hohe Request-Frequenz von derselben IP über kurze Zeit. Genau dieses Signal-Set wollen wir blockieren.
Die Alternative wäre, eine Whitelist-Mechanik einzuziehen („dieser Token gehört zum Owner-Team, lass durch"). Die hat aber denselben Schwachpunkt wie jedes Whitelist-System: jemand klaut den Token, schon ist die Whitelist ein Backdoor.
Die echte Lektion: Verifikations-Layer trennen
Wenn Production-Traffic strikt geschützt ist, brauchen Sie einen separaten Verifikations-Pfad. Drei Optionen:
- Per Vercel CLI inspizieren:
npx vercel inspect https://nex-soft.comzeigt direkt welcher Deployment hinter dem Alias hängt, ohne den Edge-Layer zu hitten. Das nutzen wir jetzt für Deploy-Verifikation. - Lighthouse via echtem Chrome: Headless Chrome lädt das ganze Page incl. BotIdClient-Script und sieht aus wie ein echter Browser. Unsere
npm run audit:lighthousePipeline funktioniert deshalb völlig normal weiter — die Audits passieren. - Bypass-Token für CI: BotID kennt das Konzept eines „bypass token", den Sie in Server-zu-Server-Aufrufen mitschicken können. Für interne Cron-Jobs oder CI-Smoke-Tests die saubere Lösung.
Wir machen aktuell Variante (1) + (2). Variante (3) kommt sobald wir CI haben.
Was wir nicht erwartet hätten
Die Firewall lernt offenbar dazu. Frühere Smoke-Tests im selben Session-Verlauf gingen durch. Erst nach ~20 Requests in 30 Minuten begann die Mitigation zu greifen. Das ist ein Feature, kein Bug — Rate-basierte Detection braucht ein bisschen Signal-Sammeln, bevor sie konfident genug ist zu blockieren.
Für eine Marketing-Site mit drei POST-Endpoints ist das Verhalten gold wert: kein menschlicher User wird je in diese Schwelle reinlaufen, aber jeder Scraper schon nach wenigen Versuchen.
Was es kostet
Praktisch nichts. <BotIdClient> ist ein ~10kb Script, lazy-loaded, das auf protected paths Signale anhängt. Server-side ist checkBotId() ein millisecond-call. Vercel-Pricing: free tier reicht für die meisten kleinen Sites; das billable cap kicked erst bei wirklich hohem Volume.
Verglichen mit der Alternative — ein Bot drained Ihr AI-Gateway-Budget über Nacht um €200 — ist das ein No-Brainer.
TL;DR
- BotID + Firewall auf teuren POST-Endpoints (besonders AI) ist Pflicht-Hygiene 2026.
- Wenn das eigene Test-Skript geblockt wird: Glückwunsch, es funktioniert.
- Planen Sie einen separaten Verifikations-Pfad (CLI / Lighthouse / Bypass-Token), bevor Sie ihn brauchen.
- Production Defense ist nicht: „lass alles durch was nicht eindeutig böse aussieht". Production Defense ist: „lass nur durch was eindeutig menschlich aussieht."
Wenn Sie gerade Ihr erstes AI-Feature in Production bringen und überlegen „brauchen wir BotID?": Ja. Bevor Sie es brauchen, nicht danach.
Fachbeiträge per E-Mail
Wie technische Entscheidungen zustande kommen — unregelmäßig und nur dann, wenn es etwas zu berichten gibt. Jederzeit abbestellbar. Sie erhalten zuerst eine Mail mit Bestätigungslink.
Hilft das Ihrem Vorhaben weiter?
Sprechen wir 30 Minuten darüber — konkret zu Ihrem Vorhaben.
Auch lesenswert
Fluid Compute statt Edge Functions
Wir haben diese Website samt Chat-Endpunkt von Edge Functions auf Fluid Compute umgestellt. Hier sind die fünf Punkte, die uns positiv überrascht haben — und die zwei Fälle, in denen die alte Runtime die bessere Wahl bleibt.
BotID gegen AI-Budget-Abuse
Ein öffentlicher /api/chat-Endpoint ohne Bot-Schutz ist eine Visa-Karte mit PIN draußen. Hier ist, wie wir Vercel BotID vor unseren AI-Chat gesetzt haben — invisible für echte User, 429 für Bots, gerettetes AI-Gateway-Budget.
Ohne Zwischenstationen. Sie sprechen direkt mit der Geschäftsleitung.
Wir hören Ihnen 30 Minuten zu, stellen ein paar gezielte Fragen und sagen Ihnen am Ende offen, ob — und wie — wir Ihnen helfen können. Wenn nicht, erhalten Sie mindestens zwei Empfehlungen, wer es könnte.
- 30 Minuten, ohne Verkaufsgespräch
- Konkrete Einschätzung Ihres Vorhabens
- Klare Einordnung, welcher Projektrahmen passt