TenDI (Tencent) CAPTCHA
en CapMonster Cloud

Captcha-oplossing, installatie op de website en testen.

Prijzen van TenDI (Tencent)-oplossing

Bericht
Prijs (USD)
$ 1.60
1000 tokens
Heb je een site geërfd met een ingebouwde captcha of andere bescherming, maar zonder toegang tot de broncode? Dan wil je natuurlijk weten welke oplossing draait, of die goed is ingesteld en hoe je de werking test.

In dit artikel hebben we geprobeerd antwoord te geven op alle belangrijke vragen. De eerste stap bij het oplossen van het vraagstuk is vaststellen welk beveiligingssysteem wordt gebruikt. Daarvoor kun je de lijst met populaire captcha’s en anti-botbeveiligingssystemen raadplegen, met visuele voorbeelden en kernkenmerken die je helpen snel te bepalen waarmee je te maken hebt.

Als je ontdekt dat je website TenDI (Tencent) gebruikt, is de volgende stap om de eigenschappen en werking ervan uitgebreider te bestuderen. In dit artikel vind je ook een handleiding voor het integreren van TenDI (Tencent), zodat je volledig begrijpt hoe het systeem op je website werkt. Zo kun je niet alleen de huidige bescherming beter doorgronden, maar ook het onderhoud ervan goed plannen.

Wat is TenDI CAPTCHA
Wat is TenDI CAPTCHA
TenDI (Tencent) CAPTCHA is een meerlaagse botbeschermingsoplossing. Door gedrag te analyseren en speciale mechanismen toe te passen, controleert het of een websitebezoeker een echte persoon is. Wordt gebruikt voor registratiebescherming, accountinlog, marketingcampagnes en het voorkomen van spam en datadiefstal.
Background
Voorbeelden van TenDI (Tencent)
Non-perception CAPTCHA
Non-perception CAPTCHA
De verificatie gebeurt automatisch zonder gebruikersinteractie. Ideaal voor scenario's waar gebruiksgemak cruciaal is.
Slider CAPTCHA
Slider CAPTCHA
Snelle en eenvoudige verificatie door een schuifregelaar te slepen. Geschikt voor de meeste gevallen.
Graphic CAPTCHA
Graphic CAPTCHA
De gebruiker klikt achtereenvolgens op afbeeldingselementen. Gebruikt in hoogbeveiligde scenario's.
Audio CAPTCHA
Audio CAPTCHA
Verificatie via audio-opname. Optimaal voor gebruikers met speciale behoeften.
Smart Verification
Smart Verification
Het systeem beoordeelt gebruikersgedrag: vertrouwde gebruikers worden direct doorgelaten, verdachte gebruikers krijgen extra controle.
Multi-dimensional Defense
Multi-dimensional Defense
Meerdere beschermingsmechanismen worden gebruikt: dynamische encryptie, anti-bot en meer.

Hoe Tencent CAPTCHA op te lossen via CapMonster Cloud

Bij het testen van formulieren met Tencent CAPTCHA is het vaak nodig te controleren of de captcha correct werkt en correct is geïntegreerd.
Je kunt de captcha handmatig testen op je website:
  • Open de formulierpagina en controleer of de captcha zichtbaar is.
  • Probeer het formulier te verzenden zonder de captcha te voltooien — de server moet een foutmelding geven.
  • Na een succesvolle captcha-oplossing moet het formulier zonder fouten worden verzonden.
Voor automatische captcha-herkenning kun je gespecialiseerde diensten gebruiken, zoals CapMonster Cloud — een tool die captcha-parameters verwerkt op zijn servers en een kant-en-klare token teruggeeft. Deze token kan in het formulier worden geplaatst om verificatie te voltooien zonder gebruikersinteractie.

Werken met CapMonster Cloud via de API bestaat doorgaans uit de volgende stappen:

Taak aanmakenTaak aanmaken
arrow
API-aanvraag versturenAPI-aanvraag versturen
arrow
Resultaat ontvangenResultaat ontvangen
arrow
Token op de pagina plaatsenToken op de pagina plaatsen
arrow
TenDI (Tencent) CAPTCHA herkenning met kant-en-klare bibliotheken
CapMonster Cloud biedt kant-en-klare bibliotheken voor eenvoudig gebruik in Python, JavaScript (Node.js) en C#.
Python
JavaScript
C#
Oplossing, tokeninvoeging en formulierverzending
Node.js-voorbeeld voor de volledige cyclus van captcha-herkenning op je webpagina. Mogelijke aanpak: gebruik HTTP-verzoeken om HTML en systeemparameters te verkrijgen, verstuur de respons en verwerk het resultaat. Of, zoals in het onderstaande voorbeeld, gebruik automatiseringstools (bijv. Playwright) — open de pagina, wacht op verificatie, stuur parameters via de CapMonster Cloud client, ontvang resultaat, voeg token in het formulier in (voor testen kun je zowel correcte als incorrecte data gebruiken) en bekijk het resultaat.

// npx playwright install chromium

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

// Vervang door je eigen waarden
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. Open de pagina
    await page.goto(WEBSITE_URL, { waitUntil: 'networkidle' });

    // 2. Wacht tot de captcha verschijnt (bijv. input of iframe)
    await page.waitForSelector('#tendi_response, iframe[src*="tendi"], input[name="tendi_response"]', { timeout: 15000 });

    // Indien nodig kun je de websiteKey van de pagina halen
    const WEBSITE_KEY = await page.evaluate(() => {
        // Voorbeeld: sitekey kan in een data-attribuut of globale variabele staan
        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. Maak een TenDI-taak aan
    const tenDIRequest = new TenDIRequest({
        websiteURL: page.url(),
        websiteKey: WEBSITE_KEY,
    });

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

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

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

    // 5. Methoden om het resultaat in te voegen
    await page.evaluate(({ ticket, randstr }) => {
        // Invoegen 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;
            }
        }

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

        // Als er geen input of callback is
        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);
  
Hoe TenDI (Tencent) CAPTCHA op je website aan te sluiten
Om het captcha-proces op je site te begrijpen, de verificatielogica te doorgronden en opnieuw in te stellen, raden we je aan deze sectie te bestuderen. Het beschrijft het proces van beveiligingsintegratie en helpt snel alle details te begrijpen.
  • 1. Log in op je account of maak een nieuw account aan op Captcha Console.
  • 2. Open de sectie Verification Management.
  • 3. Maak een nieuwe captcha (indien nog niet aanwezig).

Je ontvangt twee parameters: CaptchaAppId en AppSecretKey. Deze gebruik je op zowel frontend als server.

Voorbeeld frontend-integratieVoorbeeld frontend-integratie
arrow

Hoe de integratie werkt

Stap 1: Laad de JS van de captcha

Het script moet dynamisch worden geladen:

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

Bij niet-standaard laden of cachen kan de captcha verkeerd werken.

Stap 2: Maak TencentCaptcha-object aan

Na JS-laden verschijnt een globale klasse:

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

Parameters:

domElement - Container waarin checkbox/iframe wordt geplaatst

CaptchaAppId - Je ID

callback - Wat te doen na verificatie

options - Uiterlijke instellingen (optioneel)

Stap 3: Roep methode aan .show()

captcha.show();

Toont captcha. Kan meerdere keren worden aangeroepen.

Stap 4: Verwerk resultaat

Callback ontvangt een object:


{
  ret: 0,              // 0 -- succes, 2 -- gebruiker sloot venster
  ticket: "...",       // vereist door server
  randstr: "...",      // ook vereist door server
  errorCode: 1001,     // als captcha niet geladen is
  errorMessage: "..."  // foutbericht
}

Voer altijd secundaire verificatie van ticket uit op de server.

"Noodherstelmodus"

Als de captcha niet laadt (bijv. CDN niet beschikbaar), kan automatisch een 'noodticket' worden uitgegeven om bedrijfsprocessen niet te onderbreken.

Scenario:

  • Captcha proberen aan te maken → fout.
  • Roep aan loadErrorCallback().
  • Genereer ticket van het type:
    trerror_<errorcode>_<appid>_<timestamp>
  • Ga door met normale verwerking, maar de server herkent het als een noodticket en beslist wat te doen.

AppId-encryptie (optioneel)

Voor maximale bescherming kan een versleutelde versie van AppId worden gebruikt in plaats van de open versie:

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

Benodigd:

  • 32-byte sleutel (AppSecretKey → aangevuld tot 32 bytes)
  • AES-256 CBC + PKCS7Padding
  • 16-byte IV
  • timestamp en geldigheidsduur in seconden

Server-side encryptie voorbeeld (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")

Server-side validatie

Stap 1. API-toegang instellen

Krijg SecretId en SecretKey van je key management paneel (CAM / API Key Management). Nodig voor gesigneerde API-verzoeken.

Stap 2. API DescribeCaptchaResult aanroepen

Zodra de client ticket en randstr heeft geretourneerd, moet de server verzoek sturen:

  • Action: DescribeCaptchaResult
  • Version: 2019-07-22 (of actuele)

Parameters:

CaptchaType - 9 (vaste waarde)

Ticket - string — ticket, terug van client

Randstr - string — randstr, terug van client

CaptchaAppId - je AppId

AppSecretKey - je geheime sleutel

UserIp - IP van gebruiker (aanbevolen)

Stap 3. Verwerk respons

API retourneert:

  • CaptchaCode: integerverificatie resultaat.
  • 0 (of OK) — captcha geslaagd, ticket geldig

Als CaptchaCode === OK, wordt de gebruiker als geverifieerd beschouwd. Anders — weigeren.

Voorbeeld — ticket verificatie 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", // regio indien nodig
});

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

Meer informatie over het aansluiten van Tencent CAPTCHA op je website vind je in de officiële documentatie.

Background
Mogelijke fouten en debugging
Bug Icon
Captcha laadt niet
(Fouten 1001, 1002 of een melding over een ongeldige handtekening) — de oorzaak kan onjuiste aanvraagparameters zijn. Zorg ervoor dat CaptchaAppId, AppSecretKey en alle aanvraagparameters correct zijn opgegeven.
Bug Icon
Ongeldige of lege ticket/randstr
Zorg dat de client beide parameters correct doorstuurt.
Bug Icon
Oplossing time-out
Verhoog de wachttijd aan de serverzijde.
Controle van de robuustheid
Na aansluiting is het belangrijk te controleren dat de bescherming correct werkt.
Aanbevelingen voor veiligheid en optimalisatie
Bewaar <span class="font-bold">AppSecretKey</span> alleen op de server, stuur deze niet naar de browser en voeg niet toe aan JS-code.
Log volledige Tencent CAPTCHA-responsen, inclusief foutcodes, tijd van verzoek en validatieparameters — dit helpt problemen sneller te diagnosticeren.
Gebruik HTTPS bij het verzenden van alle parameters <span class="font-bold">(ticket, randstr)</span> om manipulatie te voorkomen.
Plaats correcte links naar <span class="font-bold">Privacybeleid</span> en <span class="font-bold">Tencent Gebruiksvoorwaarden</span> op de pagina, zoals vereist door de licentie.
Conclusie

Als je een website in beheer krijgt waarop al een captcha of een ander beveiligingssysteem is geïnstalleerd en je geen toegang hebt tot de code, is dat geen probleem! Het is vrij eenvoudig te bepalen welke technologie precies wordt gebruikt. Voor het controleren of alles correct werkt, kun je de herkenningsservice CapMonster Cloud in een geïsoleerde testomgeving gebruiken, zodat je zeker weet dat het tokenverwerkingsmechanisme en de validatielogica correct functioneren.

In het geval van TenDI (Tencent) is het voldoende om het systeem te herkennen, het gedrag te analyseren en te bevestigen dat de beveiliging correct werkt. In het artikel hebben we laten zien hoe je TenDI (Tencent) kunt herkennen en waar je instructies vindt om het te koppelen of opnieuw te configureren, zodat je de bescherming met vertrouwen kunt onderhouden en de werking onder controle kunt houden.

Conclusion
Handige links
DocIconTenDI (Tencent) CAPTCHA documentatieDocIconCapMonster Cloud documentatie (werken met Tencent CAPTCHA)DocIconWat is Tencent Captcha (TenDI) en hoe los je het op?

Veelgestelde vragen over TenDI (Tencent) CAPTCHA

TenDI biedt verschillende challenge-typen voor verschillende risiconiveaus en gebruikerservaringen.

  • Non-Perception — draait onopvallend op de achtergrond voor verificatie met minimale frictie.
  • Slider — gebruikt een sleep-puzzel voor standaard zichtbare controles.
  • Graphic — vraagt gebruikers op specifieke vormen te klikken; geschikt voor risicovoller verkeer.
  • Audio — biedt een toegankelijk alternatief voor visuele challenges.
  • Smart Verification — laat vertrouwde gebruikers ongemerkt passeren en toont alleen bij verdachte sessies een challenge.

TenDI bevat ook Multi-dimensional Defense, een set van 10 achtergrondbeschermingsmechanismen die de botweerstand verbeteren. Gebruik voor CapMonster Cloud altijd type: CustomTask en class: "TenDI", ongeacht de challenge op de pagina. Voor meer API-details, zie hier.

Nadat uw client een ticket en randstr teruggeeft, moet uw server deze valideren via de Tencent-API DescribeCaptchaResult. Stuur voor ticketverificatie een ondertekend API-verzoek met deze parameters:

  • CaptchaType: 9
  • Ticket: het ticket van de client
  • Randstr: de randstr van de client
  • CaptchaAppId: uw AppId
  • AppSecretKey: uw captcha-geheime sleutel
  • UserIp: het IP-adres van de gebruiker (aanbevolen)

Uw server heeft ook Tencent Cloud API-referenties nodig (SecretId en SecretKey) om het verzoek te ondertekenen.

Controleer de waarde CaptchaCode in het antwoord:

  • 0 of OK: captcha geslaagd, ticket is geldig
  • elke andere waarde: verificatie mislukt, verzoek moet worden afgewezen
  • Stel AppSecretKey nooit bloot in frontendcode.
  • Gebruik server-side de versleutelde CaptchaAppId-flow van Tencent. Genereer de versleutelde waarde in uw backend om deze naar de client te sturen.
  • Stuur na het oplossen van de CAPTCHA ticket en randstr van de client naar uw backend om ze te valideren via de API DescribeCaptchaResult.
  • Bewaar alle geheimen en verificatielogica op de backend.

Voor stapsgewijze configuratie, zie Hoe TenDI (Tencent) CAPTCHA op je website aan te sluiten hoger op deze pagina.

Voor de client-side Tencent-integratie ondersteunt TenDI een optionele parameter aidEncrypted die de platte CaptchaAppId vervangt bij widgetinitialisatie.

aidEncrypted wordt als volgt gegenereerd: aidEncrypted = Base64(IV + ciphertext)

ciphertext is het resultaat van het versleutelen van een string met uw AppId, de huidige Unix-timestamp en de ttl (verlooptijd in seconden). Versleuteling gebruikt AES-256-CBC met PKCS7-padding.

Voor elk verzoek wordt een willekeurige 16-byte IV gegenereerd en vooraan het versleutelde resultaat geplaatst.

De uiteindelijke binaire waarde wordt Base64-gecodeerd voordat deze als aidEncrypted aan de widget wordt doorgegeven.

Als het Tencent CAPTCHA-script niet laadt of initialiseert, laat de Disaster Recovery-modus van TenDI de gebruikersstroom doorgaan in plaats van het verzoek te blokkeren.

  • Roep loadErrorCallback() aan wanneer de CAPTCHA-JavaScript niet kan laden of starten, bijvoorbeeld door een netwerk- of CDN-probleem.
  • Dit maakt een disaster-recovery-ticket in het formaat trerror_<errorcode>_<CaptchaAppId>_<timestamp>.
  • Het ticket wordt teruggegeven via de normale callback-flow met ret: 0 (succes).
  • Server-side mag ret: 0 niet op zichzelf als normaal succes worden beschouwd. Controleer ook het ticketvoorvoegsel (trerror_) en errorCode = 1001 om disaster recovery te detecteren.

Definieer de foutafhandelaar vóór het laden van het CAPTCHA-script en roep deze aan bij een JS-laadfout voor betrouwbare werking.