logo
bars

TenDI (Tencent) CAPTCHA
e CapMonster Cloud

Risoluzione dei captcha, integrazione sul sito e test.
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 TenDI (Tencent), il passo successivo è analizzarne più nel dettaglio le proprietà e il funzionamento. In questo stesso articolo puoi anche studiare la guida all’integrazione di TenDI (Tencent), 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'è TenDI CAPTCHA
Cos'è TenDI CAPTCHA
TenDI (Tencent) CAPTCHA è un sistema di protezione anti-bot multilivello. Attraverso l'analisi del comportamento e meccanismi speciali, verifica se il visitatore del sito è un essere umano reale. Viene utilizzato per proteggere registrazioni, accessi, campagne di marketing e prevenire spam e furto di dati.
Background
Esempi di TenDI (Tencent)
Non-perception CAPTCHA
Non-perception CAPTCHA
La verifica avviene automaticamente senza intervento dell'utente. Ideale per scenari in cui l'esperienza utente è critica.
Slider CAPTCHA
Slider CAPTCHA
Verifica rapida e semplice tramite trascinamento del cursore. Adatta alla maggior parte dei casi.
Graphic CAPTCHA
Graphic CAPTCHA
L'utente clicca successivamente sugli elementi dell'immagine. Utilizzata in scenari ad alta sicurezza.
Audio CAPTCHA
Audio CAPTCHA
Verifica tramite registrazione audio. Ottimale per utenti con esigenze particolari.
Smart Verification
Smart Verification
Il sistema valuta il comportamento dell'utente: quelli fidati passano subito, i sospetti vengono ulteriormente controllati.
Multi-dimensional Defense
Multi-dimensional Defense
Vengono utilizzati più meccanismi di protezione: crittografia dinamica, anti-bot e altri.

Come risolvere Tencent CAPTCHA con CapMonster Cloud

Durante il test di moduli con Tencent CAPTCHA, spesso è necessario verificare che il captcha funzioni correttamente e sia integrato correttamente.
Puoi testare manualmente il captcha integrato sul tuo sito:
  • Apri la pagina con il modulo e assicurati che il captcha venga visualizzato.
  • Prova a inviare il modulo senza completare il captcha — il server dovrebbe restituire un errore.
  • Dopo aver risolto correttamente il captcha, il modulo dovrebbe essere inviato senza errori.
Per il riconoscimento automatico del captcha, puoi utilizzare servizi specializzati come CapMonster Cloud — uno strumento che riceve i parametri del captcha, li elabora sui propri server e restituisce un token pronto all'uso. Questo token può essere inserito nel modulo 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 TenDI (Tencent) CAPTCHA con librerie pronte all'uso
CapMonster Cloud fornisce librerie pronte all'uso per facilitare il lavoro in Python, JavaScript (Node.js) e C#.
Python
JavaScript
C#
Risoluzione, inserimento del token e invio del modulo
Esempio in Node.js per il ciclo completo di riconoscimento del captcha sulla tua pagina web. Possibili approcci: utilizzare richieste HTTP per ottenere HTML e parametri del sistema di protezione, inviare la risposta e processare il risultato. Oppure, come nell'esempio sotto, usare strumenti di automazione (es: Playwright) — aprire la pagina, attendere la verifica, inviare i parametri tramite il client CapMonster Cloud, ottenere il risultato, inserire il token nel modulo (per test puoi usare dati corretti o non corretti) e osservare il risultato.

// npx playwright install chromium

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

// Sostituisci con i tuoi valori
const API_KEY = "YOUR_API_KEY";         
const WEBSITE_URL = "https://example.com";

async function solveTenDIOnPage() {
    const browser = await chromium.launch({ headless: false });
    const context = await browser.newContext();
    const page = await context.newPage();

    // 1. Apri la pagina
    await page.goto(WEBSITE_URL, { waitUntil: 'networkidle' });

    // 2. Attendi la comparsa del captcha (es: input o iframe)
    await page.waitForSelector('#tendi_response, iframe[src*="tendi"], input[name="tendi_response"]', { timeout: 15000 });

    // Se necessario, puoi estrarre il websiteKey direttamente dalla pagina
    const WEBSITE_KEY = await page.evaluate(() => {
        // Esempio: sitekey potrebbe essere in un attributo data o in una variabile globale
        const el = document.querySelector('#tendi_response') || document.querySelector('div[data-sitekey]');
        return el?.getAttribute('data-sitekey') || window.TenDI_siteKey || "183268248";
    });

    console.log("Website key detected:", WEBSITE_KEY);

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

    // 3. Crea un task TenDI
    const tenDIRequest = new TenDIRequest({
        websiteURL: page.url(),
        websiteKey: WEBSITE_KEY,
    });

    const balance = await client.getBalance();
    console.log("Balance:", balance);

    // 4. Risolvi il captcha
    const solution = await client.Solve(tenDIRequest);
    console.log("Solution:", solution);

    const { ticket, randstr } = solution.solution.data;

    // 5. Modi per inserire il risultato
    await page.evaluate(({ ticket, randstr }) => {
        // Inserimento in input
        const inputSelectors = ['#tendi_response', 'input[name="tendi_response"]', 'input[type="hidden"]'];
        let inserted = false;
        for (const sel of inputSelectors) {
            const input = document.querySelector(sel);
            if (input) {
                input.value = ticket;
                input.dispatchEvent(new Event('input', { bubbles: true }));
                const form = input.closest('form');
                if (form) form.submit();
                inserted = true;
                break;
            }
        }

        // Funzione callback JS
        if (typeof window.onCaptchaSolved === 'function') {
            window.onCaptchaSolved(ticket, randstr);
            inserted = true;
        }

        // Se non ci sono input o callback
        if (!inserted) {
            window._tenDITicket = ticket;
            window._tenDIRandStr = randstr;
            console.log("Ticket and randstr saved to window._tenDITicket and window._tenDIRandStr");
        }
    }, { ticket, randstr });

    await page.waitForTimeout(5000);
    await browser.close();
}

solveTenDIOnPage().catch(console.error);
  
Come collegare TenDI (Tencent) CAPTCHA al tuo sito
Per comprendere come funziona il captcha sul tuo sito, la logica di verifica, per ricollegarlo o riconfigurarlo, ti consigliamo di leggere questa sezione. Descrive il processo di integrazione della protezione e aiuta a comprendere rapidamente tutti i dettagli.
  • 1. Accedi al tuo account o crea un nuovo account in Captcha Console.
  • 2. Apri la sezione Verification Management.
  • 3. Crea un nuovo captcha (se non esiste ancora).

Riceverai due parametri: CaptchaAppId e AppSecretKey. Li userai sia nel frontend che nel server.

Esempio di integrazione frontendEsempio di integrazione frontend
arrow

Come funziona l'integrazione

Step 1: Caricare il JS del captcha

Lo script deve essere caricato dinamicamente:

<script src="https://ca.turing.captcha.qcloud.com/TJNCaptcha-global.js"></script>

Se lo script viene caricato in modo non standard o messo in cache, il captcha potrebbe non funzionare correttamente.

Step 2: Creare oggetto TencentCaptcha

Dopo il caricamento del JS appare una classe globale:

<script src="new TencentCaptcha(domElement, CaptchaAppId, callback, options);"></script>

Parametri:

domElement - Container dove viene inserito checkbox/iframe

CaptchaAppId - Il tuo ID

callback - Cosa fare dopo la verifica

options - Impostazioni visive (opzionale)

Step 3: Chiamare il metodo .show()

captcha.show();

Mostra il captcha. Può essere chiamato più volte.

Step 4: Elaborare il risultato

Il callback riceve un oggetto:


{
  ret: 0,              // 0 -- successo, 2 -- l'utente ha chiuso la finestra
  ticket: "...",       // necessario al server
  randstr: "...",      // necessario anche al server
  errorCode: 1001,     // se il captcha non è caricato
  errorMessage: "..."  // messaggio di errore
}

Sul server eseguire sempre una verifica secondaria del ticket.

Modalità "Disaster Recovery"

Se il captcha non viene caricato (es: CDN non disponibile), è possibile generare automaticamente un "ticket di emergenza" per non interrompere il processo aziendale.

Scenario:

  • Tentativo di creare captcha → errore.
  • Chiamare loadErrorCallback().
  • Generare ticket del tipo:
    trerror_<errorcode>_<appid>_<timestamp>
  • Continuare il processo normalmente, ma il server riconosce che è un ticket di emergenza e decide cosa fare.

Crittografia AppId (opzionale)

Per la massima protezione, è possibile inviare al captcha una versione crittografata di AppId invece di quella aperta:

aidEncrypted = Base64(IV + AES256(AppId & timestamp & ttl))

Necessario:

  • Chiave da 32 byte (AppSecretKey → completata a 32 byte)
  • AES-256 CBC + PKCS7Padding
  • IV da 16 byte
  • timestamp e durata in secondi

Esempio di crittografia lato server (Python)


from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64

def encrypt(plaintext, key, iv):
    cipher = AES.new(key, AES.MODE_CBC, iv)
    ciphertext = cipher.encrypt(pad(plaintext.encode(), AES.block_size))
    return base64.b64encode(iv + ciphertext).decode("utf-8")

Validazione lato server

Step 1. Configurazione accesso API

Nel pannello gestione chiavi (CAM / API Key Management) ottieni SecretId e SecretKey. Queste chiavi servono per richieste API firmate.

Step 2. Chiamare API DescribeCaptchaResult

Dopo che il client ha restituito ticket e randstr, il server deve inviare la richiesta:

  • Action: DescribeCaptchaResult
  • Version: 2019-07-22 (o attuale)

Parametri:

CaptchaType - 9 (valore fisso)

Ticket - string — ticket, restituito dal client

Randstr - string — randstr, restituito dal client

CaptchaAppId - tuo AppId

AppSecretKey - tua chiave segreta

UserIp - IP utente (consigliato)

Step 3. Elaborare risposta

L'API restituisce:

  • CaptchaCode: integerrisultato della verifica.
  • 0 (o OK) — captcha superata, ticket valido

Se CaptchaCode === OK, l'utente è considerato verificato. Altrimenti — rifiutare.

Esempio — verifica ticket in Node.js


import { v20190722 as captcha } from "@tencentcloud/tencentcloud-sdk-nodejs";
const client = new captcha.Client({
  credential: {
    secretId: "YOUR_SECRET_ID",
    secretKey: "YOUR_SECRET_KEY"
  },
  region: "ap-project", // regione, se necessaria
});

async function verifyCaptcha(ticket, randstr, userIp) {
  const params = {
    CaptchaType: 9,
    Ticket: ticket,
    Randstr: randstr,
    CaptchaAppId: YOUR_APP_ID,
    AppSecretKey: "YOUR_APP_SECRET_KEY",
    UserIp: userIp
  };

  const resp = await client.DescribeCaptchaResult(params);
  const code = resp.Response.CaptchaCode;
  return code === 0;
}
HelpIcon

Ulteriori informazioni sull'integrazione di Tencent CAPTCHA sul tuo sito sono disponibili nella documentazione ufficiale.

Background
Possibili errori e debug
Bug Icon
Captcha non si carica
(Errori 1001, 1002 o messaggio di firma non valida) — la causa potrebbe essere parametri di richiesta non corretti. Assicurarsi che CaptchaAppId, AppSecretKey e tutti i parametri della richiesta siano specificati correttamente.
Bug Icon
ticket/randstr errato o vuoto
Assicurati che il client invii correttamente entrambi i parametri.
Bug Icon
Timeout risoluzione
Aumenta il tempo di attesa lato server.
Verifiche della resilienza della protezione
Dopo l'integrazione, è importante assicurarsi che la protezione funzioni correttamente.
Suggerimenti di sicurezza e ottimizzazione
Conserva <b>AppSecretKey</b> solo sul server, non inviarla al browser e non includerla nel codice JS.
Registra tutte le risposte di Tencent CAPTCHA, incluso codice errore, tempo richiesta e parametri di validazione — aiuta a diagnosticare problemi più rapidamente.
Usa HTTPS per inviare tutti i parametri <b>(ticket, randstr)</b> per evitare manomissioni.
Inserisci link corretti alla <b>Privacy Policy</b> e ai <b>Termini di utilizzo Tencent</b> come richiesto dalla licenza.
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 TenDI (Tencent), è sufficiente individuare il sistema, analizzarne il comportamento e assicurarsi che la protezione funzioni correttamente. Nell’articolo abbiamo mostrato come riconoscere TenDI (Tencent) 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 TenDI (Tencent) CAPTCHADocIconDocumentazione CapMonster Cloud (lavoro con Tencent CAPTCHA)DocIconCos'è Tencent Captcha (TenDI) e come risolverlo?