Node.js में reCAPTCHA v3 कैसे हल करें और एक Action सेट करें

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

reCAPTCHA v3 कभी कोई puzzle नहीं दिखाता। यह चुपचाप visit को score देता है और page को एक token देता है, जिसे site अपने खुद के backend पर सत्यापित करती है। आपकी ओर से क्लिक करने के लिए कुछ नहीं है, इसलिए पूरा काम बस एक ऐसा token बनाना है जिसे site स्वीकार करेगी। Node.js में वह वही है recaptcha v2 के लिए इस्तेमाल किया गया मेथड, एक अतिरिक्त विकल्प के साथ।

जो विवरण तय करता है कि यह काम करेगा या नहीं वह action है।

Setup

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 लोकल रूप से चलता है, इसलिए किसी भी कॉल के सफल होने से पहले desktop app का खुला होना ज़रूरी है।

बुनियादी call

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

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

v2 से दो अंतर: version: 'v3' आवश्यक है, और action उससे मेल खाना चाहिए जो page इसमें पास करता है grecaptcha.execute। इसे छोड़ दें और यह डिफ़ॉल्ट रूप से इस पर आ जाता है verify.

action क्यों मायने रखता है

Actions वे लेबल हैं जिन्हें एक साइट हर सुरक्षित इंटरैक्शन से जोड़ती है ताकि एक login और एक checkout को अलग-अलग स्कोर किया जा सके। ज़्यादातर backend यह जाँचते हैं कि token पर मौजूद action उससे मेल खाता है जिसकी उन्होंने उस endpoint के लिए अपेक्षा की थी।

गलत label भेजें और token असली तो होता है लेकिन एक अलग interaction के लिए टैग होकर पहुंचता है, जिसे कई verifiers अस्वीकार कर देते हैं। अनुमान लगाने के बजाय पेज से असली वैल्यू पढ़ें:

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

सामान्य मान हैं login, submit, homepage और checkout, लेकिन वे मनमानी स्ट्रिंग्स हैं जिन्हें साइट बनाने वाले ने चुना।

Enterprise v3

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

Enterprise एक अलग product के बजाय एक orthogonal flag है, इसलिए यह बस ऊपर जुड़ जाता है। दोनों को पेज जो script लोड करता है उससे पहचानें: Enterprise खींचता है enterprise.js, standard खींचता है api.js. एक ग़लत अंदाज़ा एक ख़राब token लौटाने के बजाय हल को फ़ेल कर देता है, इसलिए जाँचना सस्ता है।

token सबमिट करना

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

v2 के विपरीत यहां कोई standard form widget नहीं है, इसलिए v3 integrations अलग-अलग होते हैं। कुछ एक hidden का उपयोग करते हैं g-recaptcha-response field, कुछ अन्य एक custom key के साथ JSON post करते हैं। किसी field नाम को मान लेने से पहले जाँचें कि पेज का अपना JavaScript क्या करता है।

बल्क में हल करना

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

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

AsyncCapSkip इस package में भी मौजूद है, लेकिन यह इसका alias है CapSkip. हर method पहले से एक Promise लौटाता है, इसलिए Promise.all Node में पूरी concurrency की कहानी यही है।

Errors

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

अक्सर पूछे जाने वाले सवाल

क्या मैं सबमिट करने से पहले score देख सकता हूं?

नहीं। score Google के पास रहता है और तभी site owner को दिखाया जाता है जब उनका backend token सत्यापित करता है। client side से आपको एक token मिलता है और कुछ नहीं, इसलिए पहले किसी score का निरीक्षण करने या उस पर फ़िल्टर करने का कोई तरीका नहीं है।

अगर पेज पर कोई दृश्य action न हो तो क्या?

कुछ पेज call करते हैं execute बिना किसी के, जिस स्थिति में default verify सही है। अगर ऊपर वाला regex कुछ नहीं ढूंढ पाता, तो आम तौर पर किसी parsing failure के बजाय यही वजह होती है।

एक v3 token कितनी देर टिकता है?

मोटे तौर पर दो मिनट, एक-बार उपयोग, v2 जैसा ही। एक pool बनाने के बजाय उस request से ठीक पहले हल करें जिसे इसकी ज़रूरत है।

सारांश

Pass version: 'v3', सेट करें action पेज जो भी वास्तव में एक्ज़ीक्यूट करता है, उसके अनुसार जोड़ें enterprise: 1 जब यह लोड होता है enterprise.js, और जल्दी सबमिट करें क्योंकि token लगभग दो मिनट में समाप्त हो जाता है।

अन्य भाषाएँ यहाँ शामिल हैं reCAPTCHA v3 सॉल्वर पेज, Enterprise की बारीकियाँ इस पर the Enterprise सॉल्वर पेज, और व्यापक Node सतह यहाँ Node.js कैप्चा सॉल्वर पेज। हमारे यहां एक असली token दिखते हुए देखें v3 डेमो। CapSkip एक है कैप्चा सॉल्वर जो आपकी अपनी मशीन पर चलता है।