Een widget draait op sites die niet van jou zijn: je klanten sluiten je boekingsformulier, shop of ticketkassa in op hun pagina's. Bot Protection werkt daar ook, met drie dingen om goed te doen: waar de tag draait, hoe het token je server bereikt en welke domeinen je plan telt.
In een frame op je eigen domein (aanbevolen)
Serveer de widget vanaf je domein en laat je klanten hem insluiten in een <iframe>. Zet de tag in de pagina binnen het frame, zoals op elke pagina van je. Bot Protection ziet dan jouw domein, welke site het frame ook toont: één domein voor je plan, bewezen zoals elk ander (je homepage heeft de tag, of je voegt het toe op de Set-up-pagina).
In een frame zijn de cookies van je pagina die van een derde partij. Chrome, Edge en Firefox houden ze apart per site die je insluit, en Safari bewaart er geen. Vertrouw daar dus niet op de cookie _kz: haal vóór de beschermde actie het token van de tag en stuur het zelf mee.
const token = await window.korzen?.ready(); await fetch("/api/book", { method: "POST", headers: { "content-type": "application/json", "x-korzen-token": token || "" }, body: JSON.stringify(order), });
Geef die header op je server als token aan de call, vóór de cookie:
const input = fromNodeRequest(req, { ip: (_get, r) => r.ip, path: "/api/book" }); input.token = req.get("x-korzen-token") || input.token; const decision = await korzen.decide(input);
Elke SDK en de call vanaf je server nemen een veld token op dezelfde manier aan. Ook de opslag van een frame is per site gescheiden, dus dezelfde bezoeker op twee sites van je klanten is voor Bot Protection twee apparaten. Dat is een ontbrekend signaal, nooit bewijs van een bot.
De challenge-pagina en frames
De challenge-pagina stuurt de bezoeker terug met een cookie die een frame niet bewaart. Beantwoord challenge in een frame dus met een eigen stap (je CAPTCHA, een controle per e-mail of telefoon), en laat require_token weg bij de acties van het frame. Zie monitor mode en block mode voor wat elke actie betekent.
Een script op de pagina van je klant
Een widget die een script is dat je klanten plakken, zonder frame, draait op hun pagina. Dan draait de tag op hun domein, telt elk domein van je klanten voor je plan, en moeten hun pagina's de tag met jouw site key hebben. Je script roept je server aan vanaf een andere origin, waar geen cookies worden meegestuurd: stuur het token in de header zoals hierboven, en sta x-korzen-token toe in je CORS-antwoord.
De eigen hostnamen van je klanten
Een hostnaam die je klant naar jou laat wijzen (tickets.hunshop.nl, een CNAME) is hun domein: het telt als een van de domeinen van je plan, net als het script hierboven. Plannen beschermen tot vijf; met meer hostnamen van je klanten serveer je de widget in een frame op je domein, of schrijf ons.