Browser-runtime
Deze gids legt uit hoe de Noxtica SDK werkt in de browsers van je bezoekers — wat er gebeurt tijdens een beoordeling, hoe caching alles snel houdt, en hoe je veelvoorkomende problemen oplost.
Hoe het werkt
Wanneer je de Noxtica SDK aan je pagina toevoegt, doet het stil vier dingen:
- Authenticeren: meldt zich aan met je Site Key via credentials die het voor jou beheert
- Verzamelen: leest de alledaagse signalen die een browser al blootlegt
- Indienen: stuurt ze naar Noxtica voor scoring
- Cachen: slaat het resultaat lokaal op zodat het werk niet bij elk bezoek opnieuw hoeft te worden gedaan
Dit alles draait op de achtergrond en blokkeert je pagina nooit.
Collectieflow
Automatisch (aanbevolen)
Bij gebruik van data-auto-check-once gebruikt de SDK slimme collectie:
<script
src="https://collect.noxtica.com/collector/noxtica.js"
data-site-key="pk_prod_your_site_key"
data-auto-init
data-auto-check-once
async
></script>
Gebruik je een content-security-policy? Dan moet je Noxtica toestemming geven om zijn manipulatiebestendige runtime, de KHAN VM, te laden en uit te voeren. Als dat niet lukt, blijft Noxtica werken met een lichtere vorm van collectie en zwakkere manipulatiebeveiliging. Zie Aan de slag → Content Security Policy voor het exacte snippet.
Eerste bezoek: er wordt een volledige beoordeling uitgevoerd en het resultaat wordt gecached.
Volgende bezoeken (binnen het cachevenster): het gecachte resultaat wordt geretourneerd en een lichtgewicht bezoek wordt geregistreerd. Er wordt geen zwaar werk uitgevoerd.
Na het verlopen van het cachevenster: er wordt een nieuwe beoordeling uitgevoerd.
Handmatige controle
Voor programmatische controle gebruik je de methode checkOnce():
const client = NoxticaCollector.createClient({
siteKey: 'pk_prod_your_site_key',
});
const result = await client.checkOnce();
if (result.fromCache) {
console.log('Using cached fingerprint');
console.log('Next collection in:', result.nextSubmitIn, 'days');
} else {
console.log('Fresh fingerprint collected');
}
Cachinggedrag
De SDK cachet elk resultaat in de browser zodat dezelfde bezoeker niet bij elke paginaweergave opnieuw wordt beoordeeld.
Cachesleutel
nox_fp_{your_site_key}
Wat er wordt gecached
- Device ID
- Tijdstempel van laatste indiening
- Tijdstempel van laatste activiteit
- Vorige risicoscore en -niveau
TTL (Time-To-Live)
De standaard cache-TTL is 7 dagen. Dit kan worden geconfigureerd:
// Override at collection time
const result = await client.checkOnce({
checkIntervalDays: 14, // 14 days instead of 7
});
// Or in seconds
const result = await client.checkOnce({
ttlSeconds: 86400, // 1 day
});
Cache vernieuwen
Om de cache te omzeilen en een verse fingerprint te verzamelen:
const result = await client.checkOnce({
forceRefresh: true,
});
Cross-tab-coördinatie
Wanneer een bezoeker meerdere tabbladen van je site tegelijk opent, zorgt de SDK ervoor dat ze slechts één keer worden beoordeeld:
- Slechts één tabblad doet het echte werk
- De andere tabbladen wachten en delen dat resultaat
Dit gebeurt automatisch — geen configuratie nodig.
Events
De SDK verstuurt events waarnaar je kunt luisteren:
noxtica:collected
Wordt geactiveerd na een geslaagde collectie of bij het teruggeven van een gecached resultaat:
document.addEventListener('noxtica:collected', (e) => {
console.log('Fingerprint ID:', e.detail.fingerprintId);
console.log('Risk Level:', e.detail.risk_level);
console.log('Score:', e.detail.score);
console.log('From Cache:', e.detail.fromCache);
});
noxtica:cache-hit
Wordt specifiek geactiveerd wanneer een gecached resultaat wordt teruggegeven:
document.addEventListener('noxtica:cache-hit', (e) => {
console.log('Cache hit, days since submission:', e.detail.daysSinceSubmit);
});
noxtica:error
Wordt geactiveerd wanneer de collectie mislukt:
document.addEventListener('noxtica:error', (e) => {
console.log('Error source:', e.detail.source);
console.log('Error message:', e.detail.message);
});
Globale variabelen
Na de collectie zijn resultaten wereldwijd beschikbaar:
// After collection completes
console.log(window.noxticaResult);
// Client instance (when using auto-init)
console.log(window.noxticaClient);
// Last error (if any)
console.log(window.noxticaLastError);
Foutafhandeling
Veelvoorkomende fouten
| Fout | Oorzaak | Oplossing |
|---|---|---|
origin_mismatch | Site Key komt niet overeen met je domein | Controleer of je domein is geregistreerd in de Backoffice |
invalid_site_key | Site Key niet gevonden of uitgeschakeld | Controleer je Site Key en zorg dat het domein actief is |
token_expired | Token heeft de TTL van 5 minuten overschreden | Automatisch — de SDK vraagt een nieuw token aan |
| Rate limit (429) | Te veel verzoeken | Verlaag de collectiefrequentie |
Fouten handmatig afhandelen
try {
const result = await client.collectAndSubmit();
} catch (error) {
if (error.message.includes('origin_mismatch')) {
// Site key configuration issue
} else if (error.message.includes('rate')) {
// Back off and retry later
}
}
Collectiemodi
De SDK ondersteunt drie collectiemodi:
| Modus | Beschrijving | Wanneer te gebruiken |
|---|---|---|
minimal | Een kleine kernset van signalen | Snelle collectie, scenario’s met weinig wrijving |
standard | Een brede set signalen | De meeste use-cases (standaard) |
max | De volledige set signalen | Maximale nauwkeurigheid, hoog-beveiligde scenario’s |
const client = NoxticaCollector.createClient({
siteKey: 'pk_prod_...',
mode: 'max', // or 'minimal', 'standard'
});
Beschermde modus (KHAN VM)
Het moeilijkste aan het bestrijden van bots is dat alles wat in een browser draait in principe zichtbaar en bewerkbaar is. Een vastberaden aanvaller kan de code van de pagina lezen, uitzoeken wat er gemeten wordt en stilletjes valse antwoorden terugsturen.
De KHAN VM verhoogt de kosten daarvan. In plaats van de collectie als leesbare code op de pagina open te laten staan, draait Noxtica het gevoelige gedeelte binnen een afgesloten, gesandboxte runtime. De logica die beslist wat er gemeten wordt ligt niet voor iedereen zichtbaar om te bestuderen en te herschrijven, en het resultaat dat het produceert is afgesloten voordat het de browser verlaat — zodat het veel moeilijker te manipuleren of te herspelen is.
Wat de KHAN VM doet:
- Manipulatiebestendige resultaten — de beoordeling is afgesloten binnen de sandbox voordat die wordt verstuurd, zodat andere scripts op de pagina hem niet stilletjes kunnen aanpassen of herspelen.
- Moeilijker te reverse-engineeren — de collectielogica blijft verborgen in de runtime in plaats van leesbaar te zijn in de ontwikkeltools van de browser.
- Hergebruikbeveiliging — elk resultaat is eenmalig en geverifieerd, zodat een vastgelegd antwoord niet simpelweg opnieuw kan worden gebruikt om een schone bezoeker voor te spiegelen.
Eerlijke grenzen — wat het niet doet:
- Het is een manipulatiebestendigheidsfunctie, geen end-to-end-encryptie.
- Als je eigen pagina is gecompromitteerd (bijvoorbeeld door een cross-site scripting-fout), kan een aanvaller op die pagina dezelfde ruwe browsersignalen zien die Noxtica ziet. De KHAN VM beschermt de verwerking en het resultaat, niet de pagina eromheen.
De KHAN VM wordt aan de serverkant ingeschakeld en vereist geen wijzigingen aan je integratie. Als hij niet kan starten — bijvoorbeeld omdat een content-security-policy hem blokkeert — valt Noxtica terug op een lichtere vorm van collectie zodat detectie blijft werken, alleen met zwakkere manipulatiebeveiliging.
Browserondersteuning
De SDK ondersteunt moderne browsers:
| Browser | Minimumversie |
|---|---|
| Chrome | 70+ |
| Firefox | 65+ |
| Safari | 12+ |
| Edge | 79+ |
Oudere browsers kunnen een verminderde signaalnauwkeurigheid hebben maar blijven functioneren.
Debugmodus
Schakel debug-logging in om problemen op te lossen:
// Before SDK loads
globalThis.NOXTICA_DEBUG = true;
// Or per-client
const client = NoxticaCollector.createClient({
siteKey: 'pk_prod_...',
debug: true,
});
// Or via script attribute
<script src="..." data-debug></script>;
Debugmodus logt:
- voortgang van de collectie
- token-levenscyclus
- cache-hits en -misses
- eventuele fouten
Let op: debugmodus is standaard stil in productie. Er verschijnt geen console-uitvoer tenzij deze expliciet is ingeschakeld.
Opslagoverwegingen
Browseropslag
De SDK gebruikt de lokale opslag van de browser om resultaten te cachen. Als die niet beschikbaar is (bijvoorbeeld bij privébrowsen of wanneer opslag is uitgeschakeld):
- Detectie werkt nog steeds
- Elke paginaweergave voert een nieuwe beoordeling uit
- Cross-tab-coördinatie kan verminderd zijn
Geen cookies
De SDK gebruikt geen cookies. Alles wat het nodig heeft wordt bewaard in de lokale opslag van de browser.
Prestatie-impact
Eerste bezoek
| Bewerking | Typische tijd |
|---|---|
| Token request | 50-100ms |
| Signal collection | 200-500ms |
| Submission | 50-150ms |
| Totaal | 300-750ms |
De collectie draait asynchroon en blokkeert het renderen van de pagina niet.
Volgende bezoeken (cache hit)
| Bewerking | Typische tijd |
|---|---|
| Cache check | <1ms |
| Visit recording | 50-100ms |
| Totaal | 50-100ms |
Probleemoplossing
Fingerprint wordt niet verzameld
- Controleer de browserconsole op fouten
- Controleer of de Site Key exact overeenkomt met je domein (inclusief
https://) - Zorg dat het domein is ingeschakeld in de Backoffice
- Schakel debugmodus in om gedetailleerde logs te zien
”WebAssembly blocked by Content Security Policy”
Als je deze waarschuwing in de browserconsole ziet, blokkeert de content-security-policy van je pagina de manipulatiebestendige runtime (de KHAN VM). Detectie blijft werken in een lichtere modus, maar je krijgt de sterkste beveiliging door het toe te staan.
Gebruik het onderstaande snippet om Noxtica te mogen laden en uitvoeren:
Content-Security-Policy: script-src 'self' 'wasm-unsafe-eval' https://collect.noxtica.com; connect-src 'self' https://collect.noxtica.com
Zie Aan de slag → Content Security Policy voor de volledige referentie.
Verschillende device-ID’s op hetzelfde apparaat
Dit kan gebeuren wanneer:
- De opgeslagen browserdata is gewist
- Het browserprofiel is veranderd
- De bezoeker gebruikt privé/incognitomodus
- De browser een ingrijpende update heeft gehad
Dit is verwacht gedrag — de herkenning past zich aan naarmate een apparaat in de loop van de tijd verandert.
Collectie duurt te lang
- Controleer het netwerktabblad op trage API-responses
- Overweeg
mode: 'minimal'te gebruiken voor snellere collectie - Zorg dat de SDK wordt geladen met het attribuut
async
Events worden niet geactiveerd
- Zorg dat je luistert voordat de SDK wordt uitgevoerd
- Controleer of de auto-init-attributen correct zijn
- Controleer of er geen JavaScript-fouten zijn die de uitvoering blokkeren
Best practices
-
Gebruik
data-auto-check-oncein plaats vandata-auto-collectom overbodige collecties te minimaliseren -
Laad de SDK asynchroon met het attribuut
asyncom het laden van pagina’s niet te blokkeren -
Luister naar events in plaats van
window.noxticaResultte pollen -
Overschrijf de TTL niet onnodig — het standaardinterval van 7 dagen is geoptimaliseerd voor de meeste use-cases
-
Ga netjes om met fouten — een mislukte collectie mag je pagina niet breken
Volgende stappen
- Aan de slag — initiële installatiegids
- Backend-integratie — server-side apparaatopzoekingen