logo
bars

DataDome CAPTCHA
và CapMonster Cloud

Giải pháp CAPTCHA, cài đặt trên website và kiểm tra.
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ả.

// 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/145.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:

npm install @datadome/module-express

Cho Node.js HTTP module:

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:


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:


<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 <b>Server-Side Key</b> chỉ trên server; không gửi cho client.
Bật logging sự kiện qua <b>logger</b> hoặc listener <b>blocked/valid</b> để theo dõi lý do bị chặn.
Đặt link <b>Chính sách bảo mật</b> và <b>Điều khoản sử dụng DataDome</b> 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)