DataDome CAPTCHA
và CapMonster Cloud

Giải pháp CAPTCHA, cài đặt trên website và kiểm tra.

Giá của giải pháp DataDome CAPTCHA

CAPTCHA
Giá (USD)
$ 2.20
1000 token
Bạn nhận lại một website đã có captcha hoặc lớp bảo vệ khác nhưng không có quyền truy cập mã nguồn? Khi đó điều bạn cần biết là giải pháp nào đang chạy, cấu hình có đúng không và cách kiểm tra như thế nào.

Trong bài viết này, chúng tôi đã cố gắng trả lời tất cả những câu hỏi quan trọng. Bước đầu tiên để bắt đầu giải quyết vấn đề là xác định hệ thống bảo mật nào đang được sử dụng. Để làm điều đó, bạn có thể tham khảo danh sách các captcha và hệ thống chống bot phổ biến, trong đó có các ví dụ minh họa và những dấu hiệu chính giúp bạn nhanh chóng nhận biết mình đang làm việc với giải pháp nào.

Nếu bạn phát hiện trang web của mình đang sử dụng DataDome CAPTCHA, bước tiếp theo là tìm hiểu chi tiết hơn về các đặc tính và cách hoạt động của nó. Ngay trong bài viết này, bạn cũng có thể xem hướng dẫn tích hợp hệ thống DataDome CAPTCHA để hiểu đầy đủ cách nó vận hành trên trang web của bạn. Điều đó giúp bạn không chỉ nắm rõ lớp bảo vệ hiện tại mà còn lập kế hoạch bảo trì một cách hợp lý.

DataDome là gì
DataDome là gì
DataDome là hệ thống bảo vệ chống bot và tấn công tự động, phân tích hành vi người truy cập và các thông số mạng để phân biệt người dùng thật và lưu lượng độc hại, đảm bảo trang web hoặc ứng dụng hoạt động ổn định.
Background
Ví dụ về DataDome CAPTCHA
Phân tích hành vi
Phân tích hành vi
Đánh giá hành động người dùng (click, scroll, tốc độ tương tác).
Kiểm tra JavaScript
Kiểm tra JavaScript
Kiểm tra ẩn trình duyệt và môi trường.
Kiểm tra mạng
Kiểm tra mạng
Phân tích IP, header, proxy và các mạng bot đã biết.
Challenge
Challenge
Hiển thị CAPTCHA (thường là slider 'Trượt sang phải để hoàn thành câu đố') nếu hệ thống nghi ngờ.

Cách giải CAPTCHA DataDome qua CapMonster Cloud

Khi kiểm tra bảo vệ DataDome, cần đảm bảo hệ thống được tích hợp đúng và phản hồi lưu lượng đáng ngờ. Để kiểm tra thủ công, mở một trang được bảo vệ bởi DataDome và xác nhận hệ thống hoạt động.
Thử gửi yêu cầu mô phỏng hành vi đáng ngờ (ví dụ, làm mới trang quá thường xuyên hoặc gửi form không hợp lệ) — DataDome sẽ chặn truy cập hoặc hiển thị trang bảo vệ.
Để kiểm tra tự động và giải CAPTCHA, bạn có thể sử dụng dịch vụ chuyên dụng như CapMonster Cloud — công cụ nhận các tham số CAPTCHA, xử lý trên server của họ và trả về kết quả sẵn sàng. Kết quả này (token hoặc cookie) có thể áp dụng vào form hoặc trình duyệt mà không cần người dùng tham gia.

Làm việc với CapMonster Cloud qua API thường gồm các bước:

Tạo nhiệm vụTạo nhiệm vụ
arrow
Gửi yêu cầu APIGửi yêu cầu API
arrow
Nhận kết quảNhận kết quả
arrow
Áp dụng token lên trangÁp dụng token lên trang
arrow
Nhận diện CAPTCHA DataDome với thư viện có sẵn
Dịch vụ CapMonster Cloud cung cấp thư viện sẵn sàng sử dụng cho PythonJavaScript (Node.js).
Python
JavaScript
Giải DataDome và áp dụng cookie
Ví dụ Node.js cho toàn bộ chu trình giải CAPTCHA trên trang web của bạn. Cách tiếp cận: sử dụng yêu cầu HTTP để lấy HTML và tham số hệ thống bảo vệ, gửi phản hồi và xử lý kết quả. Hoặc dùng công cụ tự động hóa (Playwright) — mở trang, chờ xác thực, gửi tham số qua client CapMonster Cloud, nhận kết quả, áp dụng cookie vào trình duyệt (có thể dùng dữ liệu đúng hoặc sai để test) và xem kết quả.
python

// npx playwright install chromium

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

// Nhập API key CapMonster Cloud của bạn
const API_KEY = 'YOUR_API_KEY';

// Website của bạn được bảo vệ bởi 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

// Cấu hình proxy
const proxy = {
  proxyType: "http",
  proxyAddress: '8.8.8.8',
  proxyPort: 8080,
  proxyLogin: 'proxyLogin',
  proxyPassword: 'proxyPassword'
};

async function main() {

  // Khởi chạy trình duyệt
  const browser = await chromium.launch({ headless: true });
  const context = await browser.newContext({ userAgent: USER_AGENT });
  const page = await context.newPage();

  // Truy cập website
  await page.goto(TARGET_URL, { waitUntil: 'networkidle' });

  // Tìm cookie datadome đã có (nếu có)
  const existingDd = (await context.cookies()).find(c => /datadome|dd_/i.test(c.name));

  // Tìm 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(`=== Các tham số DataDome đã trích xuất ===`);
  console.log(`captchaUrl:`, captchaUrl || 'không tìm thấy');
  console.log(`cookie datadome hiện tại::`, existingDd ? ${existingDd.name}=${existingDd.value}` : 'không có');

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

  // Gửi task đến CapMonster
  console.log(`Gửi task DataDome đến CapMonster......`);

  // Gửi task giải DataDome
  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;

  // Lấy domain và cookie cần thiết từ kết quả
  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 từ 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));

  // Cài đặt cookie datadome trong trình duyệt
  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 đã được cài đặt:`, ddSolved.value);

  // Mở lại website sau khi cài cookie
  const page2 = await context.newPage();
  const resp2 = await page2.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });

  console.log(`Trạng thái sau khi cài cookie:: ${resp2?.status()}`);

  await browser.close();
}

main();
  
Cách kết nối DataDome CAPTCHA với website của bạn
Để hiểu cách CAPTCHA hoạt động, logic xác thực và kết nối lại hoặc cấu hình lại, hãy nghiên cứu phần này. Nó mô tả quá trình tích hợp bảo vệ — giúp bạn nhanh chóng nắm rõ chi tiết.

1. Đăng nhập tài khoản hoặc đăng ký DataDome và lấy key client-side và server-side.

Quan trọng: dùng email công ty để đăng ký.

Sau khi đăng ký, bạn truy cập vào bảng quản trị.

2. Thêm website (domain) trong bảng DataDome.

Thêm domain và chọn các tham số bảo vệ:

  • Web Protection (bảo vệ HTTP traffic)
  • Bot detection & mitigation
  • Frequency & behavior analysis
  • Challenge pages (trang xác thực DataDome)
  • JS tag configuration

3. Cài đặt tích hợp phía server.

Sử dụng Protection API hoặc chọn module sẵn cho stack của bạn (Node.js / Express, Nginx, Cloudflare, Java (Tomcat/Jetty/Vert.x), Go...).

Cài đặt SDK/middleware chính thức DataDome, cấu hình server-side key.

Ví dụ tích hợp DataDome trên Node.js:

DataDome bảo vệ server khỏi bot và yêu cầu đáng ngờ, tự động hiển thị challenge khi cần. Module có thể dùng với Express hoặc HTTP server tích hợp Node.js.

Cài đặt

Cho Express:

javascript
npm install @datadome/module-express

Cho Node.js HTTP module:

javascript
npm install @datadome/module-http

Hỗ trợ Node.js 18+. Cần server-side key từ panel DataDome.

Tích hợp với ExpressTích hợp với Express
arrow
Tích hợp với Node.js HTTP serverTích hợp với Node.js HTTP server
arrow

Cấu hình module

Có thể truyền cấu hình khi tạo client:

javascript

const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY', {
  timeout: 150, // timeout (ms) sau đó request được cho phép
  urlPatternInclusion: null, // URL nào được kiểm tra
  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',
});

Tùy chọn nâng cao:

  • Logging headers DataDome (enrichedHeaders)
  • CSP nonce: app.use(datadomeClient.middleware({ nonce: 'VALUE' }))
  • Ghi đè metadata request qua handlers

HelpIcon

Chi tiết hơn xem tài liệu chính thức.

4. Kết nối client.

Chèn JS Tag vào <head> website:

markup

<head>
  <script>
    window.ddjskey = 'YOUR_DATADOME_JS_KEY';
    window.ddoptions = {
      // Thêm cài đặt tại đây (tùy chọn)
    };
  </script>
  <script src="https://js.datadome.co/tags.js" async></script>
  <!-- Các phần tử khác của head -->
</head>

YOUR_DATADOME_JS_KEY → Thay bằng Client-Side Key của bạn.

Script nên load đầu <head> để DataDome bắt request và theo dõi hành vi người dùng chính xác.

Nếu website dùng CSP, thêm các directive sau:

Với inline scriptVới inline script
arrow
Tải script bên ngoàiTải script bên ngoài
arrow

HelpIcon

Chi tiết client-side integration xem tài liệu chính thức DataDome CAPTCHA.

Kiểm tra kết quả

DataDome tạo cookie datadome= sau khi xác minh thành công. Cookie này được người dùng tự động gửi và máy chủ sẽ cho phép yêu cầu. Nếu cookie bị thiếu hoặc không hợp lệ, DataDome sẽ hiển thị lại thử thách.

Background
Các lỗi thường gặp và cách xử lý
Bug Icon
Key hoặc domain không hợp lệ
DataDome không bảo vệ site đúng, challenge không xuất hiện. Kiểm tra key Server-Side đúng và domain đã được thêm vào panel DataDome.
Bug Icon
Timeout xử lý yêu cầu
Server không nhận được phản hồi từ API DataDome. Tăng giá trị timeout trong cài đặt module.
Bug Icon
Token rỗng hoặc tham số không hợp lệ
Lỗi khi gửi kết quả xác thực tới server. Đảm bảo tag JS client được cài đúng và trả về ddtoken.
Bug Icon
Challenge chưa hoàn tất
Yêu cầu bị đánh dấu nghi ngờ hoặc token hết hạn. Để chẩn đoán, bật logging qua logger của module và theo dõi sự kiện blocked và valid.
Kiểm tra độ bền vững của lớp bảo vệ
Khuyến nghị về bảo mật và tối ưu
Lưu <span class="font-bold">Server-Side Key</span> chỉ trên server; không gửi cho client.
Bật logging sự kiện qua <span class="font-bold">logger</span> hoặc listener <span class="font-bold">blocked/valid</span> để theo dõi lý do bị chặn.
Đặt link <span class="font-bold">Chính sách bảo mật</span> và <span class="font-bold">Điều khoản sử dụng DataDome</span> trên trang form để minh bạch với người dùng.
Kết luận

Nếu bạn tiếp quản một trang web đã được cài sẵn captcha hoặc một hệ thống bảo vệ khác nhưng lại không có quyền truy cập vào mã nguồn thì cũng không có gì đáng lo! Việc xác định chính xác công nghệ nào đang được sử dụng khá đơn giản. Để kiểm tra xem mọi thứ có hoạt động đúng hay không, bạn có thể dùng dịch vụ nhận dạng CapMonster Cloud trong một môi trường thử nghiệm tách biệt nhằm đảm bảo cơ chế xử lý token và logic kiểm tra đang vận hành chính xác.

Với DataDome CAPTCHA, bạn chỉ cần nhận diện hệ thống, quan sát hành vi của nó và xác nhận rằng lớp bảo vệ hoạt động đúng cách. Trong bài viết này, chúng tôi đã chỉ ra cách nhận biết DataDome CAPTCHA và nơi tìm hướng dẫn tích hợp hoặc cấu hình lại, giúp bạn tự tin duy trì lớp bảo vệ và kiểm soát hoạt động của nó.

Conclusion
Liên kết hữu ích
DocIconTài liệu DataDome CAPTCHADocIconTài liệu CapMonster Cloud (làm việc với DataDome CAPTCHA)

Câu hỏi thường gặp về DataDome

Dấu hiệu rõ ràng nhất là cookie datadome trong phản hồi của máy chủ:

  1. Mở trang web được bảo vệ bởi DataDome trong trình duyệt (Chrome, Firefox).
  2. Nhấn F12 (công cụ phát triển) → vào tab ApplicationCookies.
  3. Tìm tên miền của trang web (ví dụ: www.example.com).
  4. Trong các cookie, tìm khóa datadome

Bạn cũng có thể kiểm tra xem các yêu cầu của trang web có bao gồm lời gọi đến geo.captcha-delivery.com trong công cụ phát triển → tab Network hay không; endpoint đó thuộc hạ tầng phân phối challenge của DataDome.

Cài đặt gói chính thức:

npm install @datadome/module-express

Nhập và khởi tạo client:

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

sau đó

new DatadomeExpress('YOUR_SERVER_SIDE_KEY')

Gắn middleware:

app.use(datadomeClient.middleware())

Trong hầu hết các trường hợp, middleware nên được đăng ký trước các route được bảo vệ để các yêu cầu có thể được phân tích trước khi đến các trình xử lý route của bạn. Tùy thuộc vào cấu trúc ứng dụng, bạn cũng có thể áp dụng middleware một cách chọn lọc cho các route hoặc nhóm route cụ thể.

Sử dụng ví dụ này làm cấu hình tối thiểu:

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

Module chính thức cũng hỗ trợ các tùy chọn cấu hình và tùy chỉnh bổ sung cho các tích hợp nâng cao.

Chi tiết hơn về tích hợp phía máy chủ trong tài liệu chính thức.

Để kiểm tra xem DataDome đã được thiết lập đúng chưa, hãy thử ba bài kiểm tra sau:

  1. Truy cập trang được bảo vệ mà không có DataDome JS Tag. Nếu tích hợp hoạt động như mong đợi, bạn sẽ nhận được challenge CAPTCHA.
  2. Mô phỏng lưu lượng tự động bằng các công cụ như k6 hoặc JMeter. DataDome sẽ phát hiện hoạt động này và phản hồi bằng challenge.
  3. Tái sử dụng datadome cookie đã giải từ địa chỉ IP khác. Điều này không nên hoạt động, và DataDome sẽ hiển thị challenge CAPTCHA mới.

Nếu giải DataDome thất bại, đây là những nguyên nhân phổ biến nhất:

  • ERROR_CAPTCHA_UNSOLVABLE: Tham số createTask không đúng. Proxy của bạn có thể bị DataDome CAPTCHA chặn. Hãy đổi máy chủ proxy dùng cho yêu cầu. Kiểm tra lại các tham số gửi trong yêu cầu. Nếu lỗi lặp lại, liên hệ hỗ trợ và cung cấp: taskId, loại tác vụ (type), hình ảnh gốc hoặc dữ liệu đầu vào, ngày/giờ của tác vụ và nội dung yêu cầu.
  • ERROR_KEY_DOES_NOT_EXIST: clientKey của bạn không đúng hoặc không hoạt động. Kiểm tra khóa trong tài khoản CapMonster Cloud của bạn.
  • ERROR_PROXY_READ_TIMEOUT: Proxy quá chậm hoặc không đáng tin cậy. Hãy thử proxy khác. Lỗi này cũng có thể do metadata.captchaUrl không đúng trong yêu cầu createTask. Kiểm tra lại liên kết đến captcha.
  • Cookie nhận từ dịch vụ không hoạt động trên trang đích: Yêu cầu giải và yêu cầu cuối được gửi từ các IP khác nhau. Sử dụng cùng một IP cho cả hai. Cũng kiểm tra việc thiết lập cookie đúng cách; đảm bảo datadome cookie trả về được đặt đúng trong trình duyệt hoặc header yêu cầu.

Đối với yêu cầu HTTP, bao gồm giá trị đã giải trong header yêu cầu Cookie dưới dạng datadome=<value> trong mỗi yêu cầu tiếp theo đến tên miền được bảo vệ.

Trong các công cụ tự động hóa trình duyệt như Puppeteer, Selenium hoặc Playwright, thêm datadome cookie bằng phương thức cookie tích hợp của framework trước khi mở trang được bảo vệ.

Ví dụ:

  • Trong Playwright, dùng context.addCookies().
  • Trong Puppeteer, dùng page.setCookie().
  • Trong Selenium, dùng driver.add_cookie().

Đảm bảo cookie được đặt cho đúng tên miền và đường dẫn. Cũng sử dụng các phương thức này với httpOnly: true, secure: truesameSite: 'Lax' để trình duyệt xử lý nó giống như cookie phiên thông thường.