TenDI (Tencent) CAPTCHA
und CapMonster Cloud

Captcha-Lösung, Installation auf der Website und Tests.

Preise für TenDI (Tencent)-Lösung

CAPTCHA
Preis (USD)
$ 1.60
1000 Token
Sie haben eine Website mit eingebauter Captcha- oder Bot-Schutzlösung übernommen, aber keinen Zugriff auf den Quellcode? Dann stellt sich schnell die Frage: Welche Lösung ist installiert, ist sie korrekt konfiguriert und wie lässt sie sich testen?

In diesem Artikel haben wir versucht, alle wichtigen Fragen zu beantworten. Der erste Schritt bei der Lösung der Aufgabe besteht darin festzustellen, welches Schutzsystem eingesetzt wird. Dazu können Sie die Liste beliebter Captchas und Anti-Bot-Schutzsysteme heranziehen, in der visuelle Beispiele und zentrale Merkmale aufgeführt sind, die Ihnen helfen, schnell zu erkennen, womit Sie es zu tun haben.

Wenn Sie feststellen, dass auf Ihrer Website TenDI (Tencent) eingesetzt wird, besteht der nächste Schritt darin, seine Eigenschaften und Funktionsweise genauer zu untersuchen. Ebenfalls in diesem Artikel finden Sie eine Anleitung zur Integration von TenDI (Tencent), damit Sie vollständig verstehen, wie das System auf Ihrer Website arbeitet. So können Sie nicht nur den aktuellen Schutz besser einschätzen, sondern auch seine Wartung vorausschauend planen.

Was ist TenDI CAPTCHA
Was ist TenDI CAPTCHA
TenDI (Tencent) CAPTCHA ist ein mehrstufiges Schutzsystem gegen Bots. Mithilfe von Verhaltensanalyse und spezieller Mechanismen wird überprüft, ob ein Website-Besucher ein echter Mensch ist. Es wird zum Schutz von Registrierungen, Anmeldungen, Marketingaktionen sowie zur Verhinderung von Spam und Datendiebstahl eingesetzt.
Background
Beispiele von TenDI (Tencent)
Non-perception CAPTCHA
Non-perception CAPTCHA
Die Überprüfung erfolgt automatisch, ohne Beteiligung des Nutzers. Ideal für Szenarien, in denen Benutzerfreundlichkeit besonders wichtig ist.
Slider CAPTCHA
Slider CAPTCHA
Schnelle und einfache Überprüfung durch Ziehen eines Schiebereglers. Geeignet für die meisten Anwendungsfälle.
Graphic CAPTCHA
Graphic CAPTCHA
Der Nutzer klickt nacheinander auf Elemente im Bild. Wird in Szenarien mit hohem Sicherheitsniveau eingesetzt.
Audio CAPTCHA
Audio CAPTCHA
Überprüfung über eine Audioaufnahme. Optimal für Nutzer mit eingeschränkten Fähigkeiten.
Smart Verification
Smart Verification
Das System bewertet das Nutzerverhalten: Vertrauenswürdige werden sofort durchgelassen, verdächtige zusätzlich geprüft.
Multi-dimensional Defense
Multi-dimensional Defense
Es werden mehrere Schutzmechanismen eingesetzt: dynamische Verschlüsselung, Anti-Bot und weitere.

Wie man Tencent CAPTCHA über CapMonster Cloud löst

Beim Testen von Formularen mit Tencent CAPTCHA besteht häufig die Notwendigkeit, die Funktion der Captcha zu überprüfen und sicherzustellen, dass sie korrekt integriert ist.
Sie können die auf Ihrer Website integrierte Captcha manuell testen:
  • Öffnen Sie die Seite mit dem Formular und stellen Sie sicher, dass die Captcha angezeigt wird.
  • Versuchen Sie, das Formular ohne Lösung der Captcha abzusenden — der Server sollte einen Fehler zurückgeben.
  • Nach erfolgreicher Lösung der Captcha sollte das Formular ohne Fehler abgesendet werden.
Für die automatische Erkennung der Captcha können spezialisierte Dienste wie CapMonster Cloud verwendet werden — ein Tool, das die Captcha-Parameter entgegennimmt, sie auf eigenen Servern verarbeitet und ein fertiges Token zurückgibt. Dieses Token kann in das Formular eingefügt werden, um die Prüfung ohne Benutzerinteraktion zu bestehen.

Die Arbeit mit CapMonster Cloud über die API umfasst in der Regel folgende Schritte:

Aufgabe erstellenAufgabe erstellen
arrow
API-Anfrage sendenAPI-Anfrage senden
arrow
Ergebnis empfangenErgebnis empfangen
arrow
Token auf der Seite einsetzenToken auf der Seite einsetzen
arrow
Erkennung von TenDI (Tencent) CAPTCHA mit fertigen Bibliotheken
Der Dienst CapMonster Cloud stellt fertige Bibliotheken für die komfortable Nutzung in Python, JavaScript (Node.js) und C# bereit.
Python
JavaScript
C#
Lösung, Token-Einfügung und Formularübermittlung
Node.js-Beispiel für den vollständigen Captcha-Erkennungszyklus auf Ihrer Webseite. Mögliche Ansätze: HTML und Schutzparameter per HTTP abrufen, die Antwort senden und das Ergebnis verarbeiten. Oder wie im folgenden Beispiel mithilfe von Automatisierungstools (z. B. Playwright) — Seite öffnen, auf die Prüfung warten, Parameter über den CapMonster-Cloud-Client senden, Ergebnis erhalten, Token in das Formular einsetzen (zu Testzwecken können sowohl korrekte als auch falsche Daten verwendet werden) und das Ergebnis beobachten.

// npx playwright install chromium

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

// Ersetzen Sie dies durch Ihre eigenen Werte
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. Seite öffnen
    await page.goto(WEBSITE_URL, { waitUntil: 'networkidle' });

    // 2. Auf das Erscheinen der Captcha warten (z. B. input oder iframe)
    await page.waitForSelector('#tendi_response, iframe[src*="tendi"], input[name="tendi_response"]', { timeout: 15000 });

    // Falls nötig, kann der websiteKey direkt von der Seite extrahiert werden
    const WEBSITE_KEY = await page.evaluate(() => {
        // Beispiel: Der sitekey kann in einem data-Attribut oder einer globalen Variable enthalten sein
        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. TenDI-Aufgabe erstellen
    const tenDIRequest = new TenDIRequest({
        websiteURL: page.url(),
        websiteKey: WEBSITE_KEY,
    });

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

    // 4. Captcha lösen
    const solution = await client.Solve(tenDIRequest);
    console.log("Solution:", solution);

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

    // 5. Methoden zum Einfügen des Lösungsergebnisses
    await page.evaluate(({ ticket, randstr }) => {
        // Einfügen in ein input-Feld
        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-Funktion
        if (typeof window.onCaptchaSolved === 'function') {
            window.onCaptchaSolved(ticket, randstr);
            inserted = true;
        }

        // Wenn weder input noch Callback vorhanden sind
        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);
  
Wie man TenDI (Tencent) CAPTCHA auf der eigenen Website einbindet
Um die Funktionsweise der Captcha auf Ihrer Website sicher zu verstehen, ihre Prüfungslogik nachzuvollziehen oder sie neu einzubinden bzw. neu zu konfigurieren, empfehlen wir, diesen Abschnitt zu studieren. Er beschreibt den vollständigen Integrationsprozess und hilft, alle Details schnell zu erfassen.
  • 1. Melden Sie sich in Ihrem Konto an oder erstellen Sie ein neues im Captcha Console.
  • 2. Öffnen Sie den Bereich Verification Management.
  • 3. Erstellen Sie eine neue Captcha (falls noch nicht vorhanden).

Sie erhalten zwei Parameter: CaptchaAppId und AppSecretKey. Diese werden im Frontend und auf dem Server verwendet.

Beispiel für die Frontend-IntegrationBeispiel für die Frontend-Integration
arrow

Wie die Integration funktioniert

Schritt 1: Laden des Captcha-JavaScripts

Das Skript muss dynamisch geladen werden:

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

Wenn das Skript auf nicht standardisierte Weise geladen oder zwischengespeichert wird, kann die Captcha fehlerhaft funktionieren.

Schritt 2: Erstellen eines TencentCaptcha-Objekts

Nach dem Laden des JavaScripts steht eine globale Klasse zur Verfügung:

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

Parameter:

domElement - Container, in den das Checkbox-/Iframe-Element eingebettet wird

CaptchaAppId - Ihre ID

callback - Aktion nach erfolgreicher Überprüfung

options - Darstellungseinstellungen (optional)

Schritt 3: Methode aufrufen .show()

captcha.show();

Zeigt die Captcha an. Kann mehrfach aufgerufen werden.

Schritt 4: Ergebnis verarbeiten

Der Callback erhält ein Objekt:


{
  ret: 0,              // 0 -- Erfolg, 2 -- Benutzer hat das Fenster geschlossen
  ticket: "...",       // wird vom Server benötigt
  randstr: "...",      // wird ebenfalls vom Server benötigt
  errorCode: 1001,     // wenn die Captcha nicht geladen werden konnte
  errorMessage: "..."  // Fehlermeldung
}

Auf dem Server muss zwingend eine zweite Überprüfung des ticket durchgeführt werden.

„Notfallmodus“ (Disaster Recovery)

Falls die Captcha nicht geladen werden kann (z. B. wenn das CDN nicht erreichbar ist), kann automatisch ein „Notfall-Ticket“ ausgegeben werden, um Geschäftsprozesse nicht zu unterbrechen.

Ablauf:

  • Versuch, eine Captcha zu erstellen → Fehler.
  • Aufruf von loadErrorCallback().
  • Generierung eines Tickets im Format:
    trerror_<errorcode>_<appid>_<timestamp>
  • Fortsetzung der Verarbeitung wie gewohnt, wobei der Server erkennt, dass es sich um ein Notfall-Ticket handelt, und entsprechend entscheidet.

Verschlüsselung des AppId (optional)

Wenn maximaler Schutz erforderlich ist, kann statt des offenen AppId eine verschlüsselte Version an die Captcha übergeben werden:

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

Erforderlich:

  • 32-Byte-Schlüssel (AppSecretKey → auf 32 Byte erweitert)
  • AES-256 CBC + PKCS7Padding
  • 16-Byte-IV
  • Timestamp und Gültigkeitsdauer in Sekunden

Serverseitiges Verschlüsselungsbeispiel (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")

Serverseitige Validierung

Schritt 1. Einrichtung des API-Zugriffs

Rufen Sie im Verwaltungsbereich Ihrer Schlüssel (CAM / API Key Management) SecretId und SecretKey für die API ab. Diese Schlüssel werden für signierte API-Anfragen benötigt.

Schritt 2. Aufruf der API DescribeCaptchaResult

Nachdem der Client ticket und randstr zurückgegeben hat, muss der Server folgende Anfrage senden:

  • Action: DescribeCaptchaResult
  • Version: 2019-07-22 (oder die aktuelle Version)

Parameter:

CaptchaType - 9 (fester Wert)

Ticket - String — ticket, vom Client zurückgegeben

Randstr - String — randstr, vom Client zurückgegeben

CaptchaAppId - Ihre AppId

AppSecretKey - Ihr geheimer Schlüssel

UserIp - IP-Adresse des Benutzers (empfohlen)

Schritt 3. Verarbeitung der Antwort

Die API gibt zurück:

  • CaptchaCode: integerdas Ergebnis der Überprüfung.
  • 0 (oder OK) — Captcha bestanden, ticket ist gültig

Wenn CaptchaCode === OK, kann davon ausgegangen werden, dass der Benutzer die Prüfung bestanden hat. Andernfalls — ablehnen.

Beispiel — Überprüfung des 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", // Region, falls erforderlich
});

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

Weitere Details zur Integration von Tencent CAPTCHA auf Ihrer Website finden Sie in der offiziellen Dokumentation.

Background
Mögliche Fehler und Debugging
Bug Icon
Captcha wird nicht geladen
(Fehler 1001, 1002 oder Meldung über eine ungültige Signatur) — die Ursache können fehlerhafte Anfrageparameter sein. Stellen Sie sicher, dass CaptchaAppId, AppSecretKey und alle Anfrageparameter korrekt angegeben sind.
Bug Icon
Ungültiges oder leeres ticket/randstr
Stellen Sie sicher, dass der Client beide Parameter korrekt übermittelt.
Bug Icon
Zeitüberschreitung bei der Lösung
Erhöhen Sie das Timeout auf der Serverseite.
Tests der Schutzstabilität
Nach der Integration ist es wichtig zu überprüfen, dass der Schutz tatsächlich korrekt funktioniert.
Tipps zu Sicherheit und Optimierung
Bewahren Sie den <span class="font-bold">AppSecretKey</span> ausschließlich auf dem Server auf, geben Sie ihn nicht an den Browser weiter und binden Sie ihn nicht in JavaScript-Code ein.
Protokollieren Sie vollständige Antworten von Tencent CAPTCHA, einschließlich Fehlercode, Anfragezeit und Validierungsparametern — das erleichtert die Fehlerdiagnose.
Verwenden Sie HTTPS für die Übertragung aller Parameter <span class="font-bold">(ticket, randstr)</span>, um Manipulationen zu vermeiden.
Platzieren Sie auf der Seite korrekte Links zur <span class="font-bold">Datenschutzerklärung</span> und zu den <span class="font-bold">Nutzungsbedingungen von Tencent</span>, wie es die Lizenz erfordert.
Fazit

Wenn Sie eine Website übernommen haben, auf der bereits ein Captcha oder ein anderes Schutzsystem installiert ist und Sie keinen Zugriff auf den Code haben, ist das kein Problem! Es ist ziemlich einfach festzustellen, welche Technologie genau verwendet wird. Und um die korrekte Funktionsweise zu überprüfen, können Sie den Erkennungsdienst CapMonster Cloud in einer isolierten Testumgebung nutzen, um sicherzustellen, dass der Mechanismus zur Tokenverarbeitung und die Prüflogik ordnungsgemäß funktionieren.

Im Fall von TenDI (Tencent) reicht es aus, das System zu erkennen, sein Verhalten zu analysieren und sich zu vergewissern, dass der Schutz korrekt arbeitet. In diesem Artikel haben wir gezeigt, wie Sie TenDI (Tencent) identifizieren und wo Sie Anleitungen für die Einbindung oder Neukonfiguration finden, damit Sie den Schutz zuverlässig betreiben und seine Arbeit unter Kontrolle halten können.

Conclusion
Nützliche Links
DocIconTenDI (Tencent) CAPTCHA DokumentationDocIconCapMonster Cloud Dokumentation (Arbeit mit Tencent CAPTCHA)DocIconWas ist Tencent Captcha (TenDI) und wie löst man sie?

Häufig gestellte Fragen zu TenDI (Tencent) CAPTCHA

TenDI bietet mehrere Challenge-Typen für unterschiedliche Risikoniveaus und Anforderungen an die Benutzererfahrung.

  • Non-Perception — läuft unauffällig im Hintergrund für eine reibungsarme Verifizierung.
  • Slider — nutzt ein Ziehpuzzle für standardmäßige sichtbare Prüfungen.
  • Graphic — fordert Nutzer auf, bestimmte Formen anzuklicken; geeignet für risikoreicheren Traffic.
  • Audio — bietet eine barrierefreie Alternative zu visuellen Challenges.
  • Smart Verification — lässt vertrauenswürdige Nutzer unbemerkt passieren und zeigt nur bei verdächtigen Sitzungen eine Challenge.

TenDI umfasst außerdem Multi-dimensional Defense, ein Set aus 10 Hintergrund-Schutzmechanismen, die die Bot-Resistenz verbessern. Für CapMonster Cloud verwenden Sie immer type: CustomTask und class: "TenDI", unabhängig von der auf der Seite angezeigten Challenge. Weitere API-Details finden Sie hier.

Nachdem Ihr Client ein ticket und randstr zurückgibt, muss Ihr Server diese über die Tencent-API DescribeCaptchaResult validieren. Senden Sie zur Ticket-Prüfung eine signierte API-Anfrage mit diesen Parametern:

  • CaptchaType: 9
  • Ticket: das vom Client zurückgegebene Ticket
  • Randstr: der vom Client zurückgegebene randstr
  • CaptchaAppId: Ihre AppId
  • AppSecretKey: Ihr Captcha-Geheimschlüssel
  • UserIp: die IP-Adresse des Nutzers (empfohlen)

Ihr Server benötigt außerdem Tencent Cloud API-Zugangsdaten (SecretId und SecretKey), um die Anfrage zu signieren.

Prüfen Sie den Wert CaptchaCode in der Antwort:

  • 0 oder OK: Captcha bestanden, Ticket ist gültig
  • jeder andere Wert: Verifizierung fehlgeschlagen, Anfrage sollte abgelehnt werden
  • Geben Sie AppSecretKey niemals im Frontend-Code preis.
  • Verwenden Sie serverseitig den verschlüsselten CaptchaAppId-Flow von Tencent. Generieren Sie den verschlüsselten Wert in Ihrem Backend für die Übergabe an den Client.
  • Senden Sie nach dem Lösen der CAPTCHA ticket und randstr vom Client an Ihr Backend, um sie über die API DescribeCaptchaResult zu validieren.
  • Bewahren Sie alle Geheimnisse und die Verifizierungslogik im Backend auf.

Für die schrittweise Einrichtung siehe Wie man TenDI (Tencent) CAPTCHA auf der eigenen Website einbindet weiter oben auf dieser Seite.

Für den clientseitigen Tencent-Integrationsflow unterstützt TenDI einen optionalen Parameter aidEncrypted, der die unverschlüsselte CaptchaAppId bei der Widget-Initialisierung ersetzt.

aidEncrypted wird wie folgt erzeugt: aidEncrypted = Base64(IV + ciphertext)

ciphertext ist das Ergebnis der Verschlüsselung einer Zeichenkette mit Ihrer AppId, dem aktuellen Unix-Zeitstempel und der ttl (Ablaufzeit in Sekunden). Die Verschlüsselung verwendet AES-256-CBC mit PKCS7-Padding.

Für jede Anfrage wird ein zufälliger 16-Byte-IV erzeugt und dem verschlüsselten Ergebnis vorangestellt.

Der endgültige Binärwert wird Base64-kodiert, bevor er als aidEncrypted an das Widget übergeben wird.

Wenn das Tencent CAPTCHA-Skript nicht geladen oder initialisiert werden kann, ermöglicht der Disaster Recovery-Modus von TenDI, den Nutzerfluss fortzusetzen, anstatt die Anfrage zu blockieren.

  • Rufen Sie loadErrorCallback() auf, wenn das CAPTCHA-JavaScript nicht geladen oder gestartet werden kann, z. B. wegen eines Netzwerk- oder CDN-Problems.
  • Dadurch wird ein Disaster-Recovery-Ticket im Format trerror_<errorcode>_<CaptchaAppId>_<timestamp> erstellt.
  • Das Ticket wird über den normalen Callback-Flow mit ret: 0 (Erfolg) zurückgegeben.
  • Serverseitig sollte ret: 0 nicht allein als normaler Erfolg gewertet werden. Prüfen Sie auch das Ticket-Präfix (trerror_) und errorCode = 1001, um den Disaster-Recovery-Modus zu erkennen.

Definieren Sie den Fehlerhandler vor dem Laden des CAPTCHA-Skripts und rufen Sie ihn bei einem JS-Ladefehler auf, damit dies zuverlässig funktioniert.