CAPTCHA DataDome
e CapMonster Cloud

Soluzione CAPTCHA, integrazione sul sito e test.

Prezzi della soluzione DataDome CAPTCHA

CAPTCHA
Prezzo (USD)
$ 2.20
1000 gettoni
Hai ereditato un sito con una captcha o un'altra protezione ma senza accesso al codice sorgente? È normale chiedersi quale soluzione sia installata, se sia configurata correttamente e come testarla.

In questo articolo abbiamo cercato di rispondere a tutte le domande principali. Il primo passo per risolvere il problema è capire quale sistema di protezione viene utilizzato. A questo scopo puoi consultare l’elenco dei captcha e dei sistemi di protezione antibot più diffusi, dove trovi esempi visivi e caratteristiche chiave che ti aiutano a identificare rapidamente con cosa hai a che fare.

Se scopri che sul tuo sito viene utilizzato DataDome CAPTCHA, il passo successivo è analizzarne più nel dettaglio le proprietà e il funzionamento. In questo stesso articolo puoi anche studiare la guida all’integrazione di DataDome CAPTCHA, per comprendere a fondo come opera sul tuo sito. Questo ti permetterà non solo di capire la protezione attuale, ma anche di pianificarne correttamente la manutenzione.

Cos'è DataDome
Cos'è DataDome
DataDome è un sistema di protezione contro bot e attacchi automatizzati che analizza il comportamento dei visitatori e i parametri di rete per distinguere gli utenti reali dal traffico dannoso e garantire il funzionamento stabile di un sito o di un'applicazione.
Background
Esempi di DataDome CAPTCHA
Analisi comportamentale
Analisi comportamentale
Valutazione delle azioni dell'utente (clic, scroll, velocità di interazione).
Verifica JavaScript
Verifica JavaScript
Controllo nascosto del browser e del suo ambiente.
Verifica rete
Verifica rete
Analisi degli indirizzi IP, header, proxy e reti di bot conosciute.
Challenge
Challenge
Visualizzazione CAPTCHA (di solito uno slider “Scorri a destra per completare il puzzle”) se il sistema ha dubbi.

Come risolvere la CAPTCHA DataDome tramite CapMonster Cloud

Durante il test della protezione DataDome, è importante assicurarsi che sia integrata correttamente e reagisca al traffico sospetto. Per la verifica manuale, apri una pagina protetta da DataDome e assicurati che il sistema sia attivo.
Prova a fare una richiesta che simuli un comportamento sospetto (ad esempio, aggiornamenti della pagina troppo frequenti o invio di moduli senza dati validi) — DataDome dovrebbe bloccare l'accesso o mostrare una pagina di protezione.
Per test automatici e risoluzione CAPTCHA, puoi usare servizi specializzati come CapMonster Cloud — uno strumento che accetta i parametri CAPTCHA, li elabora sui propri server e restituisce una soluzione pronta. Questa soluzione (token o cookie) può essere inserita in un modulo o browser per superare la verifica senza intervento dell'utente.

Lavorare con CapMonster Cloud via API di solito prevede i seguenti passaggi:

Creazione della taskCreazione della task
arrow
Invio della richiesta APIInvio della richiesta API
arrow
Ricezione del risultatoRicezione del risultato
arrow
Inserimento del token nella paginaInserimento del token nella pagina
arrow
Riconoscimento CAPTCHA DataDome con librerie pronte all'uso
Il servizio CapMonster Cloud fornisce librerie pronte per un uso comodo in Python e JavaScript (Node.js).
Python
JavaScript
Risoluzione DataDome e inserimento cookie
Esempio in Node.js per il ciclo completo di riconoscimento CAPTCHA sul tuo sito web. Possibili approcci: usare richieste HTTP per ottenere HTML e parametri del sistema di protezione, inviare la risposta e processare il risultato; oppure usare strumenti di automazione (es. Playwright) — aprire la pagina, attendere la verifica, inviare i parametri tramite il client CapMonster Cloud, ottenere il risultato, inserire i cookie nel browser (per test puoi usare dati corretti o non corretti) e osservare il risultato.

// npx playwright install chromium

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

// Inserisci la tua chiave API CapMonster Cloud
const API_KEY = 'YOUR_API_KEY';

// Il tuo sito è protetto da 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

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

async function main() {

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

  // Vai al sito
  await page.goto(TARGET_URL, { waitUntil: 'networkidle' });

  // Cerca eventuale cookie datadome esistente
  const existingDd = (await context.cookies()).find(c => /datadome|dd_/i.test(c.name));

  // Trova iframe DataDome -> URL CAPTCHA
  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(`=== Parametri DataDome estratti ===`);
  console.log(`captchaUrl:`, captchaUrl || 'non trovato');
  console.log(`cookie datadome attuale::`, existingDd ? ${existingDd.name}=${existingDd.value}` : 'nessuno');

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

  // Invia il task a CapMonster
  console.log(`Invio del task DataDome a CapMonster......`);

  // Invio task DataDome per risoluzione
  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;

  // Ottieni dominio e cookie necessari dalla soluzione
  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=== Cookie di 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));

  // Imposta cookie datadome nel browser
  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(`Cookie datadome impostato:`, ddSolved.value);

  // Riapri il sito dopo aver inserito il cookie
  const page2 = await context.newPage();
  const resp2 = await page2.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });

  console.log(`Stato dopo inserimento cookie:: ${resp2?.status()}`);

  await browser.close();
}

main();
  
Come collegare DataDome CAPTCHA al tuo sito
Per comprendere correttamente il funzionamento del CAPTCHA sul tuo sito, la logica di verifica e per riconnettere o riconfigurare, consigliamo di studiare questa sezione. Descrive il processo di integrazione e aiuta a capire rapidamente tutti i dettagli.

1. Accedi al tuo account o registrati su DataDome e ottieni le chiavi (client-side e server-side).

Importante: per registrarti è necessario usare un'email aziendale.

Dopo la registrazione accederai al pannello di amministrazione.

2. Aggiungi il sito (dominio) nel pannello DataDome.

Aggiungi il dominio nel sistema e seleziona i parametri di protezione:

  • Protezione Web (protezione traffico HTTP)
  • Bot detection & mitigation
  • Frequency & behavior analysis
  • Pagine challenge (pagina di verifica DataDome)
  • JS tag configuration

3. Installa l'integrazione lato server.

Usa Protection API o scegli un modulo pronto per il tuo stack (Node.js / Express, Nginx, Cloudflare, Java (Tomcat/Jetty/Vert.x), Go, ecc.).

Installa SDK/middleware ufficiale di DataDome e configura la server-side key.

Esempio integrazione DataDome in Node.js:

DataDome protegge il server da bot e richieste sospette, mostrando automaticamente il challenge se necessario. Il modulo può essere usato con Express o con il server HTTP integrato Node.js.

Installazione

Per Express:

npm install @datadome/module-express

Per modulo HTTP Node.js:

npm install @datadome/module-http

Supportate versioni Node.js 18 e successive. Necessaria la server-side key dal pannello DataDome.

Integrazione con ExpressIntegrazione con Express
arrow
Integrazione con server HTTP Node.jsIntegrazione con server HTTP Node.js
arrow

Impostazioni modulo

Puoi passare la configurazione al momento della creazione del client:


const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY', {
  timeout: 150, // timeout in ms dopo il quale la richiesta è consentita
  urlPatternInclusion: null, // quali URL verificare
  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',
});

Opzioni avanzate:

  • Logging headers DataDome (enrichedHeaders)
  • CSP nonce: app.use(datadomeClient.middleware({ nonce: 'VALUE' }))
  • Sovrascrivere metadati richiesta tramite handlers

HelpIcon

Ulteriori dettagli sull'integrazione server-side in documentazione ufficiale.

4. Integrare lato client.

Inserisci il JS Tag nel <head> del tuo sito:


<head>
  <script>
    window.ddjskey = 'YOUR_DATADOME_JS_KEY';
    window.ddoptions = {
      // Aggiungi qui le tue impostazioni (opzionale)
    };
  </script>
  <script src="https://js.datadome.co/tags.js" async></script>
  <!-- Altri elementi head -->
</head>

YOUR_DATADOME_JS_KEY → Sostituisci con la tua Client-Side key.

Carica lo script all'inizio del <head> affinché DataDome possa intercettare le richieste e tracciare correttamente il comportamento dell'utente.

Se il sito usa CSP, aggiungi le seguenti direttive:

Per script inlinePer script inline
arrow
Per caricamento script esterniPer caricamento script esterni
arrow

HelpIcon

Ulteriori dettagli sull'integrazione lato client in documentazione ufficiale CAPTCHA DataDome.

Verifica del risultato

DataDome crea il cookie datadome= dopo una verifica completata con successo. Questo cookie viene inviato automaticamente dall’utente e il server accetta la richiesta. Se il cookie manca o non è valido, DataDome mostrerà nuovamente la challenge.

Background
Possibili errori e debug
Bug Icon
Chiave o dominio non valido
DataDome non protegge correttamente il sito; il challenge non appare. Controlla che sia usata la Server-Side Key corretta e che il dominio sia aggiunto nel pannello DataDome.
Bug Icon
Timeout elaborazione richiesta
Il server non ha ricevuto risposta dall'API DataDome. Aumenta il valore timeout nelle impostazioni del modulo.
Bug Icon
Token vuoto o parametro non valido
Errore nell'invio del risultato di verifica al server. Assicurati che il JS tag client sia correttamente installato e restituisca ddtoken.
Bug Icon
Challenge non superato
La richiesta è stata contrassegnata come sospetta o il token è scaduto. Per diagnostica, abilita il logging tramite il parametro logger del modulo e monitora gli eventi blocked e valid.
Verifiche della resilienza della protezione
Suggerimenti di sicurezza e ottimizzazione
Conserva la <span class="font-bold">Server-Side Key</span> solo sul server; non trasmetterla al client.
Abilita il logging degli eventi tramite <span class="font-bold">logger</span> o listener <span class="font-bold">blocked/valid</span> per monitorare le cause dei blocchi.
Inserisci link alla <span class="font-bold">Privacy Policy</span> e ai <span class="font-bold">Termini di utilizzo DataDome</span> nelle pagine dei form, come raccomandato per trasparenza verso gli utenti.
Conclusione

Se ti è capitato un sito con un captcha o un altro sistema di protezione già installato e senza accesso al codice, nessun problema! È piuttosto facile capire quale tecnologia viene utilizzata. Per verificare che tutto funzioni correttamente, puoi usare il servizio di riconoscimento CapMonster Cloud in un ambiente di test isolato, così da assicurarti che il meccanismo di elaborazione dei token e la logica di verifica funzionino correttamente.

Nel caso di DataDome CAPTCHA, è sufficiente individuare il sistema, analizzarne il comportamento e assicurarsi che la protezione funzioni correttamente. Nell’articolo abbiamo mostrato come riconoscere DataDome CAPTCHA e dove trovare le istruzioni per la sua integrazione o riconfigurazione, in modo da poter mantenere la protezione in modo affidabile e controllarne il funzionamento.

Conclusion
Link utili
DocIconDocumentazione CAPTCHA DataDomeDocIconDocumentazione CapMonster Cloud (lavoro con CAPTCHA DataDome)

Domande frequenti su DataDome

L'indicatore più evidente è il cookie datadome nelle risposte del server:

  1. Apri il sito protetto da DataDome in un browser (Chrome, Firefox).
  2. Premi F12 (strumenti di sviluppo) → vai alla scheda ApplicationCookies.
  3. Trova il dominio del sito (es. www.example.com).
  4. Tra i cookie, cerca la chiave datadome

Puoi anche verificare se le richieste del sito includono chiamate a geo.captcha-delivery.com negli strumenti di sviluppo → scheda Network; quell'endpoint appartiene all'infrastruttura di consegna delle challenge di DataDome.

Installa il pacchetto ufficiale:

npm install @datadome/module-express

Importa e inizializza il client:

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

poi

new DatadomeExpress('YOUR_SERVER_SIDE_KEY')

Collega il middleware:

app.use(datadomeClient.middleware())

Nella maggior parte dei casi, il middleware dovrebbe essere registrato prima delle route protette, così le richieste possono essere analizzate prima di raggiungere i gestori delle route. A seconda della struttura dell'applicazione, puoi anche applicare il middleware in modo selettivo a route o gruppi di route specifici.

Usa questo esempio come configurazione minima:

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');
})

Il modulo ufficiale supporta anche opzioni aggiuntive di configurazione e personalizzazione per integrazioni avanzate.

Maggiori dettagli sull'integrazione lato server nella documentazione ufficiale.

Per verificare se DataDome è configurato correttamente, prova questi tre test:

  1. Visita una pagina protetta senza il DataDome JS Tag. Se l'integrazione funziona come previsto, dovresti ricevere un challenge CAPTCHA.
  2. Simula traffico automatizzato con strumenti come k6 o JMeter. DataDome dovrebbe rilevare questa attività e rispondere con un challenge.
  3. Riutilizza un datadome cookie risolto da un altro indirizzo IP. Questo non dovrebbe funzionare e DataDome dovrebbe mostrare un nuovo challenge CAPTCHA.

Se la risoluzione di DataDome fallisce, queste sono le cause più comuni:

  • ERROR_CAPTCHA_UNSOLVABLE: I parametri createTask sono errati. Il tuo proxy potrebbe essere bloccato dalla DataDome CAPTCHA. Cambia il server proxy usato per la richiesta. Ricontrolla i parametri inviati nella richiesta. Se l'errore si ripete, contatta il supporto fornendo: taskId, tipo di task (type), immagine originale o dati di input, data/ora del task e corpo della richiesta.
  • ERROR_KEY_DOES_NOT_EXIST: Il tuo clientKey è errato o inattivo. Verifica la chiave nel tuo account CapMonster Cloud.
  • ERROR_PROXY_READ_TIMEOUT: Il proxy è troppo lento o inaffidabile. Prova un altro proxy. Questo errore può anche essere causato da un metadata.captchaUrl errato nella richiesta createTask. Ricontrolla il link alla captcha.
  • I cookie ricevuti dal servizio non funzionano sul sito di destinazione: La richiesta di risoluzione e la richiesta finale sono state inviate da IP diversi. Usa lo stesso IP per entrambe. Verifica anche la corretta configurazione dei cookie; assicurati che il datadome cookie restituito sia impostato correttamente nel browser o negli header della richiesta.

Per le richieste HTTP, includi il valore risolto nell'header di richiesta Cookie come datadome=<value> in ogni richiesta successiva al dominio protetto.

Negli strumenti di automazione del browser come Puppeteer, Selenium o Playwright, aggiungi il datadome cookie usando il metodo cookie integrato del framework prima di aprire la pagina protetta.

Ad esempio:

  • In Playwright, usa context.addCookies().
  • In Puppeteer, usa page.setCookie().
  • In Selenium, usa driver.add_cookie().

Assicurati che il cookie sia impostato per il dominio e il percorso corretti. Usa anche questi metodi con httpOnly: true, secure: true e sameSite: 'Lax' affinché il browser lo gestisca come un normale cookie di sessione.