DataDome CAPTCHA
en CapMonster Cloud

CAPTCHA-oplossing, installatie op de website en testen.

Prijzen van DataDome CAPTCHA-oplossing

Bericht
Prijs (USD)
$ 2.20
1000 tokens
Heb je een site geërfd met een ingebouwde captcha of andere bescherming, maar zonder toegang tot de broncode? Dan wil je natuurlijk weten welke oplossing draait, of die goed is ingesteld en hoe je de werking test.

In dit artikel hebben we geprobeerd antwoord te geven op alle belangrijke vragen. De eerste stap bij het oplossen van het vraagstuk is vaststellen welk beveiligingssysteem wordt gebruikt. Daarvoor kun je de lijst met populaire captcha’s en anti-botbeveiligingssystemen raadplegen, met visuele voorbeelden en kernkenmerken die je helpen snel te bepalen waarmee je te maken hebt.

Als je ontdekt dat je website DataDome CAPTCHA gebruikt, is de volgende stap om de eigenschappen en werking ervan uitgebreider te bestuderen. In dit artikel vind je ook een handleiding voor het integreren van DataDome CAPTCHA, zodat je volledig begrijpt hoe het systeem op je website werkt. Zo kun je niet alleen de huidige bescherming beter doorgronden, maar ook het onderhoud ervan goed plannen.

Wat is DataDome
Wat is DataDome
DataDome is een systeem ter bescherming tegen bots en geautomatiseerde aanvallen dat het gedrag van bezoekers en netwerkparameters analyseert om echte gebruikers te onderscheiden van kwaadaardig verkeer en zo de stabiele werking van een website of applicatie te waarborgen.
Background
Voorbeelden van DataDome CAPTCHA
Gedragsanalyse
Gedragsanalyse
Beoordeling van gebruikersacties (klikken, scrollen, interactiesnelheid).
JavaScript-check
JavaScript-check
Verborgen controle van browser en omgeving.
Netwerkcheck
Netwerkcheck
Analyse van IP-adressen, headers, proxies en bekende botnetwerken.
Challenge
Challenge
CAPTCHA-weergave (meestal als slider “Sleep naar rechts om de puzzel te voltooien”) wanneer het systeem twijfel heeft.

Hoe DataDome CAPTCHA op te lossen via CapMonster Cloud

Bij het testen van DataDome-bescherming is het belangrijk om te controleren of deze correct is geïntegreerd en reageert op verdacht verkeer. Voor handmatige controle, open een DataDome-beschermde pagina en controleer of het systeem actief is.
Probeer een verzoek uit te voeren dat verdacht gedrag simuleert (bijv. te vaak pagina verversen of een formulier indienen zonder geldige gegevens) — DataDome moet de toegang blokkeren of een beschermpagina tonen.
Voor automatische tests en CAPTCHA-oplossing kun je gespecialiseerde services zoals CapMonster Cloud gebruiken — een tool die CAPTCHA-parameters verwerkt op hun servers en een kant-en-klare oplossing teruggeeft. Deze oplossing (token of cookie) kan in een formulier of browser worden ingevoerd om de verificatie zonder gebruiker te voltooien.

Werken met CapMonster Cloud via de API bestaat doorgaans uit de volgende stappen:

Taak aanmakenTaak aanmaken
arrow
API-aanvraag versturenAPI-aanvraag versturen
arrow
Resultaat ontvangenResultaat ontvangen
arrow
Token op de pagina plaatsenToken op de pagina plaatsen
arrow
DataDome CAPTCHA-herkenning met kant-en-klare bibliotheken
De CapMonster Cloud-service biedt kant-en-klare bibliotheken voor eenvoudig gebruik in Python en JavaScript (Node.js).
Python
JavaScript
DataDome-oplossing en cookie-injectie
Node.js-voorbeeld voor de volledige cyclus van CAPTCHA-herkenning op je webpagina. Mogelijke benaderingen: gebruik HTTP-verzoeken om HTML en parameters van het beveiligingssysteem te verkrijgen, verzend het antwoord en verwerk het resultaat; of gebruik automatiseringstools (bijv. Playwright) — open de pagina, wacht op verificatie, stuur parameters via de CapMonster Cloud-client, ontvang het resultaat, voeg cookies in de browser in (voor testen kunnen zowel correcte als incorrecte gegevens worden gebruikt) en bekijk het resultaat.

// npx playwright install chromium

import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, DataDomeRequest } from '@zennolab_com/capmonstercloud-client';

// Voer je CapMonster Cloud API-sleutel in
const API_KEY = 'YOUR_API_KEY';

// Je website is beschermd door DataDome
const TARGET_URL = 'https://example.com/';

const USER_AGENT = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36

// Proxy-instellingen
const proxy = {
  proxyType: "http",
  proxyAddress: '8.8.8.8',
  proxyPort: 8080,
  proxyLogin: 'proxyLogin',
  proxyPassword: 'proxyPassword'
};

async function main() {

  // Browser starten
  const browser = await chromium.launch({ headless: true });
  const context = await browser.newContext({ userAgent: USER_AGENT });
  const page = await context.newPage();

  // Ga naar de website
  await page.goto(TARGET_URL, { waitUntil: 'networkidle' });

  // Zoek naar bestaande datadome-cookie (indien aanwezig)
  const existingDd = (await context.cookies()).find(c => /datadome|dd_/i.test(c.name));

  // Zoek DataDome iframe -> CAPTCHA URL
  const captchaUrl = await page.evaluate(() =>
    Array.from(document.querySelectorAll('iframe[src]'))
      .find(i => /captcha-delivery\.com\/captcha/i.test(i.src))
      ?.src || null
  );

  console.log(`=== Uitgehaalde DataDome-parameters ===`);
  console.log(`captchaUrl:`, captchaUrl || 'niet gevonden');
  console.log(`huidige datadome-cookie::`, existingDd ? ${existingDd.name}=${existingDd.value}` : 'geen');

  const cm = CapMonsterCloudClientFactory.Create(
    new ClientOptions({ clientKey: API_KEY })
  );

  // Verstuur taak naar CapMonster
  console.log(`Verstuur DataDome-taak naar CapMonster......`);

  // Verstuur taak voor DataDome-oplossing
  const solve = await cm.Solve(new DataDomeRequest({
    _class: "DataDome",
    websiteURL: TARGET_URL,
    userAgent: USER_AGENT,
    proxy,
    metadata: {
      captchaUrl: captchaUrl || undefined,
      datadomeCookie: existingDd
        ? `${existingDd.name}=${existingDd.value}`
        : undefined
    }
  }));

  const sol = solve?.solution;

  // Ontvang domein en benodigde cookies uit de oplossing
  const host = new URL(TARGET_URL).hostname;
  const domainKey =
    Object.keys(sol.domains).find(d => d.includes(host))
    || Object.keys(sol.domains)[0];

  const cookiesArr = sol.domains[domainKey]?.cookies || [];

  console.log(`\n=== Cookies van CapMonster ===`);
  cookiesArr.forEach(c => console.log(`${c.name}=${c.value}`));

  const ddSolved =
    cookiesArr.find(c => c.name?.toLowerCase() === 'datadome')
    || cookiesArr.find(c => /datadome/i.test(c.name));

  // Stel datadome-cookie in browser in
  await context.addCookies([{
    name: 'datadome',
    value: ddSolved.value,
    domain: '.' + host,
    path: '/',
    httpOnly: ddSolved.httpOnly ?? true,
    secure: ddSolved.secure ?? true,
    sameSite: ddSolved.sameSite ?? 'Lax'
  }]);

  console.log(`datadome-cookie ingesteld:`, ddSolved.value);

  // Open de site opnieuw na het invoegen van de cookie
  const page2 = await context.newPage();
  const resp2 = await page2.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });

  console.log(`Status na cookie-instelling:: ${resp2?.status()}`);

  await browser.close();
}

main();
  
Hoe DataDome CAPTCHA aan je website te koppelen
Om de werking van CAPTCHA op je site te begrijpen, de verificatielogica te leren en opnieuw te koppelen of opnieuw in te stellen, raden we aan deze sectie te bestuderen. Hierin wordt het beschermingsintegratieproces uitgelegd, zodat je snel alle details kunt begrijpen.

1. Log in op je account of registreer bij DataDome en verkrijg de client-side en server-side sleutels.

Belangrijk: gebruik een bedrijfs-e-mail voor registratie.

Na registratie krijg je toegang tot het admin-paneel.

2. Voeg je website (domein) toe in het DataDome-paneel.

Voeg je domein toe aan het systeem en kies de beschermingsinstellingen:

  • Webbescherming (HTTP-verkeer bescherming)
  • Bot detection & mitigation
  • Frequency & behavior analysis
  • Challenge-pagina's (DataDome verificatiepagina)
  • JS tag configuration

3. Installeer server-side integratie.

Gebruik Protection API of kies een module voor je stack (Node.js / Express, Nginx, Cloudflare, Java (Tomcat/Jetty/Vert.x), Go, enz.).

Installeer de officiële DataDome SDK/middleware en configureer de server-side key.

Voorbeeld DataDome-integratie in Node.js:

DataDome beschermt de server tegen bots en verdachte verzoeken en toont automatisch challenge indien nodig. Module kan met Express of ingebouwde HTTP-server Node.js worden gebruikt.

Installatie

Voor Express:

npm install @datadome/module-express

Voor Node.js HTTP-module:

npm install @datadome/module-http

Node.js 18+ ondersteund. Server-side key vereist vanuit DataDome-paneel.

Integratie met ExpressIntegratie met Express
arrow
Integratie met Node.js HTTP-serverIntegratie met Node.js HTTP-server
arrow

Module-instellingen

Je kunt configuratie doorgeven bij het maken van de client:


const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY', {
  timeout: 150, // timeout in ms waarna het verzoek wordt toegestaan
  urlPatternInclusion: null, // welke URL's te controleren
  urlPatternExclusion: /\.(avi|flv|mka|mkv|mov|mp4|mpeg|mpg|mp3|flac|ogg|ogm|opus|wav|webm|webp|bmp|gif|ico|jpeg|jpg|png|svg|svgz|swf|eot|otf|ttf|woff|woff2|css|less|js|map|json|avif|xml|gz|zip)$/i,
  endpointHost: 'api.datadome.co',
});

Geavanceerde opties:

  • DataDome headers loggen (enrichedHeaders)
  • CSP nonce: app.use(datadomeClient.middleware({ nonce: 'VALUE' }))
  • Overschrijven van request-metadata via handlers

HelpIcon

Meer details over server-side integratie in officiële documentatie.

4. Integreer client-side.

Plaats de JS-tag in het <head> van je website:


<head>
  <script>
    window.ddjskey = 'YOUR_DATADOME_JS_KEY';
    window.ddoptions = {
      // Voeg hier je instellingen toe (optioneel)
    };
  </script>
  <script src="https://js.datadome.co/tags.js" async></script>
  <!-- Andere head-elementen -->
</head>

YOUR_DATADOME_JS_KEY → Vervang door je Client-Side key.

Het script moet aan het begin van <head> worden geladen zodat DataDome verzoeken kan onderscheppen en gebruikersgedrag correct volgen.

Gebruik CSP? Voeg de volgende richtlijnen toe:

Voor inline scriptVoor inline script
arrow
Voor externe scripts ladenVoor externe scripts laden
arrow

HelpIcon

Meer details over client-side integratie in DataDome CAPTCHA officiële documentatie.

Resultaatcontrole

DataDome maakt de cookie datadome= aan na een succesvolle verificatie. Deze cookie wordt automatisch door de gebruiker verzonden, en de server laat het verzoek door. Als de cookie ontbreekt of ongeldig is, toont DataDome opnieuw een challenge.

Background
Mogelijke fouten en debugging
Bug Icon
Ongeldige sleutel of domein
DataDome beschermt de site niet correct; challenge verschijnt niet. Controleer of de juiste Server-Side Key wordt gebruikt en het domein is toegevoegd in het DataDome-paneel.
Bug Icon
Request-verwerking timeout
De server heeft geen antwoord van de DataDome API ontvangen. Verhoog de timeout-waarde in de module-instellingen.
Bug Icon
Lege token of ongeldige parameter
Fout bij het doorgeven van de verificatieresultaten naar de server. Zorg dat de client JS-tag correct is geïnstalleerd en ddtoken retourneert.
Bug Icon
Challenge niet voltooid
Het verzoek is als verdacht gemarkeerd of token is verlopen. Voor diagnose, schakel logging in met de moduleparameter logger en volg de events blocked en valid.
Controle van de robuustheid
Aanbevelingen voor veiligheid en optimalisatie
Bewaar de <span class="font-bold">Server-Side Key</span> alleen op de server; geef deze niet aan de client.
Schakel event logging in via <span class="font-bold">logger</span> of <span class="font-bold">blocked/valid</span>-listeners om de oorzaak van blokkades te volgen.
Plaats links naar <span class="font-bold">Privacybeleid</span> en <span class="font-bold">DataDome Gebruiksvoorwaarden</span> op formulierspagina's voor transparantie naar gebruikers.
Conclusie

Als je een website in beheer krijgt waarop al een captcha of een ander beveiligingssysteem is geïnstalleerd en je geen toegang hebt tot de code, is dat geen probleem! Het is vrij eenvoudig te bepalen welke technologie precies wordt gebruikt. Voor het controleren of alles correct werkt, kun je de herkenningsservice CapMonster Cloud in een geïsoleerde testomgeving gebruiken, zodat je zeker weet dat het tokenverwerkingsmechanisme en de validatielogica correct functioneren.

In het geval van DataDome CAPTCHA is het voldoende om het systeem te herkennen, het gedrag te analyseren en te bevestigen dat de beveiliging correct werkt. In het artikel hebben we laten zien hoe je DataDome CAPTCHA kunt herkennen en waar je instructies vindt om het te koppelen of opnieuw te configureren, zodat je de bescherming met vertrouwen kunt onderhouden en de werking onder controle kunt houden.

Conclusion
Handige links
DocIconDataDome CAPTCHA-documentatieDocIconCapMonster Cloud-documentatie (werken met DataDome CAPTCHA)

Veelgestelde vragen over DataDome

De duidelijkste indicator is de datadome-cookie in serverantwoorden:

  1. Open de door DataDome beschermde site in een browser (Chrome, Firefox).
  2. Druk op F12 (ontwikkeltools) → ga naar het tabblad ApplicationCookies.
  3. Zoek het domein van de site (bijv. www.example.com).
  4. Zoek onder de cookies naar de sleutel datadome

U kunt ook controleren of de verzoeken van de site aanroepen naar geo.captcha-delivery.com bevatten in de ontwikkeltools → tabblad Network; dat endpoint behoort tot de challenge-delivery-infrastructuur van DataDome.

Installeer het officiële pakket:

npm install @datadome/module-express

Importeer en initialiseer de client:

const { DatadomeExpress } = require('@datadome/module-express')

dan

new DatadomeExpress('YOUR_SERVER_SIDE_KEY')

Koppel de middleware:

app.use(datadomeClient.middleware())

In de meeste gevallen moet de middleware vóór beschermde routes worden geregistreerd, zodat verzoeken kunnen worden geanalyseerd voordat ze uw route-handlers bereiken. Afhankelijk van de structuur van uw applicatie kunt u de middleware ook selectief toepassen op specifieke routes of routegroepen.

Gebruik dit voorbeeld als minimale configuratie:

const { DatadomeExpress } = require('@datadome/module-express');
const express = require('express');
const app = express();

// Initialize DataDome client
const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY');

// Connect middleware
app.use(datadomeClient.middleware());

// Your routes
app.get('/', (req, res) => {
  res.send('Hello World');
});

// Start server
app.listen(3000, () => {
  console.log('Server running on port 3000');
})

De officiële module ondersteunt ook extra configuratie- en aanpassingsopties voor geavanceerde integraties.

Meer details over server-side integratie in de officiële documentatie.

Om te controleren of DataDome correct is ingesteld, probeer deze drie tests:

  1. Bezoek een beschermde pagina zonder de DataDome JS Tag. Als de integratie werkt zoals verwacht, zou u een CAPTCHA-challenge moeten ontvangen.
  2. Simuleer geautomatiseerd verkeer met tools zoals k6 of JMeter. DataDome zou deze activiteit moeten detecteren en reageren met een challenge.
  3. Herbruik een opgeloste datadome cookie vanaf een ander IP-adres. Dit zou niet moeten werken en DataDome zou een nieuwe CAPTCHA-challenge moeten tonen.

Als het oplossen van DataDome mislukt, zijn dit de meest voorkomende redenen:

  • ERROR_CAPTCHA_UNSOLVABLE: De createTask-parameters zijn onjuist. Uw proxy kan zijn geblokkeerd door de DataDome CAPTCHA. Wijzig de proxyserver die u voor het verzoek gebruikt. Controleer de parameters in het verzoek opnieuw. Als de fout zich herhaalt, neem contact op met de support en geef op: taskId, taaktype (type), originele afbeelding of invoergegevens, datum/tijd van de taak en request body.
  • ERROR_KEY_DOES_NOT_EXIST: Uw clientKey is onjuist of inactief. Controleer de sleutel in uw CapMonster Cloud-account.
  • ERROR_PROXY_READ_TIMEOUT: De proxy is te traag of onbetrouwbaar. Probeer een andere proxy. Deze fout kan ook worden veroorzaakt door een onjuiste metadata.captchaUrl in het createTask-verzoek. Controleer de link naar de captcha opnieuw.
  • De cookies ontvangen van de dienst werken niet op de doelsite: Het oplossingsverzoek en het definitieve verzoek zijn verzonden vanaf verschillende IP's. Gebruik hetzelfde IP voor beide. Controleer ook de juiste cookie-instelling; zorg ervoor dat de geretourneerde datadome cookie correct is ingesteld in uw browser of verzoekheaders.

Voor HTTP-verzoeken, voeg de opgeloste waarde toe aan de Cookie-requestheader als datadome=<value> bij elk volgend verzoek naar het beschermde domein.

In browser-automatiseringstools zoals Puppeteer, Selenium of Playwright, voeg de datadome cookie toe met de ingebouwde cookie-methode van het framework voordat u de beschermde pagina opent.

Bijvoorbeeld:

  • In Playwright gebruikt u context.addCookies().
  • In Puppeteer gebruikt u page.setCookie().
  • In Selenium gebruikt u driver.add_cookie().

Zorg ervoor dat de cookie is ingesteld voor het juiste domein en pad. Gebruik deze methoden ook met httpOnly: true, secure: true en sameSite: 'Lax', zodat de browser deze op dezelfde manier behandelt als een normale sessiecookie.