Cara Memecahkan reCAPTCHA v3 di Node.js dan Menetapkan Action

solve recaptcha v3 in node.js - How to Solve reCAPTCHA v3 in Node.js and Set an Action

reCAPTCHA v3 tidak pernah menampilkan teka-teki. Ia menilai kunjungan secara diam-diam dan memberikan token kepada halaman, yang kemudian diverifikasi situs di backend-nya sendiri. Dari sisi Anda tidak ada yang perlu diklik, jadi seluruh pekerjaannya adalah menghasilkan token yang akan diterima situs. Di Node.js hal itu adalah recaptcha metode yang digunakan untuk v2, dengan satu opsi tambahan.

Detail yang menentukan apakah ini berhasil adalah action.

Penyiapan

npm install capskip
const { CapSkip } = require('capskip');

const solver = new CapSkip({
  host: '127.0.0.1',
  port: 8080,
  recaptchaTimeout: 300,   // seconds, shared with Turnstile and GeeTest
});

CapSkip berjalan secara lokal, jadi aplikasi desktop harus terbuka sebelum panggilan apa pun berhasil.

Panggilan dasar

const result = await solver.recaptcha(
  '6Lc...YOUR_SITEKEY',
  'https://example.com/checkout',
  { version: 'v3', action: 'submit' },
);

console.log(result.code);   // the v3 token

Dua perbedaan dari v2: version: 'v3' diperlukan, dan action harus cocok dengan apa yang diteruskan halaman ke grecaptcha.execute. Hilangkan dan nilai defaultnya menjadi verify.

Mengapa action itu penting

Action adalah label yang dilekatkan situs pada setiap interaksi terlindungi sehingga login dan checkout dapat dinilai secara terpisah. Sebagian besar backend memeriksa bahwa action pada token cocok dengan yang mereka harapkan untuk endpoint tersebut.

Kirim label yang salah dan token-nya asli tetapi datang bertanda untuk interaksi yang berbeda, yang ditolak banyak verifikator. Baca nilai sebenarnya dari halaman alih-alih menebak:

const html = await (await fetch('https://example.com/checkout')).text();

// Sites normally call execute() with the action as a string literal.
const match = html.match(/execute\([^,]+,\s*\{\s*action:\s*['"]([^'"]+)/);
const action = match ? match[1] : 'verify';

const result = await solver.recaptcha(sitekey, pageUrl, {
  version: 'v3',
  action,
});

Nilai yang umum adalah login, submit, homepage dan checkout, tetapi keduanya adalah string sembarang yang dipilih oleh siapa pun yang membangun situs itu.

Enterprise v3

const result = await solver.recaptcha(sitekey, pageUrl, {
  version: 'v3',
  enterprise: 1,
  action: 'submit',
});

Enterprise adalah flag ortogonal, bukan produk yang berbeda, jadi ia tinggal ditumpuk. Bedakan keduanya dari skrip yang dimuat halaman: Enterprise menarik dari enterprise.js, standar menarik api.js. Tebakan yang salah membuat pemecahan gagal alih-alih mengembalikan token yang buruk, jadi memeriksanya murah.

Mengirimkan token

const response = await fetch('https://example.com/checkout', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    token: result.code,
    orderId: '...',
  }),
});

Tidak seperti v2, tidak ada widget formulir standar, sehingga integrasi v3 bervariasi. Sebagian menggunakan elemen tersembunyi g-recaptcha-response , sebagian lain mengirim JSON dengan key kustom. Periksa apa yang dilakukan JavaScript milik halaman itu sendiri sebelum mengasumsikan nama field.

Pemecahan massal

const tokens = await Promise.all(
  urls.map((url) =>
    solver.recaptcha(sitekey, url, { version: 'v3', action: 'submit' })),
);

console.log(tokens.map((t) => t.code));

AsyncCapSkip juga ada dalam paket ini, tetapi merupakan alias dari CapSkip. Setiap metode sudah mengembalikan Promise, jadi Promise.all adalah keseluruhan cerita konkurensi di Node.

Kesalahan

const { ApiException, NetworkException } = require('capskip');

try {
  const result = await solver.recaptcha(sitekey, pageUrl, { version: 'v3' });
} catch (err) {
  if (err instanceof NetworkException) {
    // CapSkip is not running on the configured port
  } else if (err instanceof ApiException) {
    // the sitekey or pageurl was rejected
  } else {
    throw err;
  }
}

Pertanyaan yang sering diajukan

Bisakah saya melihat skornya sebelum mengirim?

Tidak. Skor tetap berada di Google dan hanya diungkapkan kepada pemilik situs ketika backend mereka memverifikasi token. Dari sisi klien Anda hanya menerima token dan tidak lebih, jadi tidak ada cara untuk memeriksa atau menyaring berdasarkan skor lebih dulu.

Bagaimana jika halaman tidak punya action yang terlihat?

Beberapa halaman memanggil execute tanpa itu, dan dalam kasus itu nilai default verify sudah benar. Jika regex di atas tidak menemukan apa pun, biasanya itulah sebabnya, bukan karena kegagalan parsing.

Berapa lama token v3 bertahan?

Sekitar dua menit, sekali pakai, sama seperti v2. Pecahkan tepat sebelum permintaan yang membutuhkannya alih-alih membangun kumpulan token.

Ringkasan

Teruskan version: 'v3', atur action ke apa pun yang sebenarnya dijalankan halaman, tambahkan enterprise: 1 saat dimuat enterprise.js, dan kirim dengan cepat karena token kedaluwarsa dalam sekitar dua menit.

Bahasa lain dibahas di halaman pemecah reCAPTCHA v3 , spesifik Enterprise ada di halaman pemecah Enterprise , dan cakupan Node yang lebih luas ada di halaman pemecah CAPTCHA Node.js . Lihat token asli muncul di halaman kami demo v3. CapSkip adalah pemecah captcha yang berjalan di komputer Anda sendiri.