logo
bars

TenDI (Tencent) CAPTCHA
ve CapMonster Cloud

Captcha çözümü, siteye kurulum ve testler.
Captcha veya başka bir koruma katmanı olan bir site devraldınız ama kaynak koda erişemiyor musunuz? O zaman hangi çözümün kurulu olduğunu, doğru ayarlanıp ayarlanmadığını ve nasıl test edileceğini bilmek istersiniz.

Bu makalede tüm önemli sorulara cevap vermeye çalıştık. Bir problemi çözmeye başlamanın ilk adımı, hangi koruma sisteminin kullanıldığını belirlemektir. Bunun için, görsel örneklerin ve neyle karşı karşıya olduğunuzu hızlıca anlamanıza yardımcı olabilecek temel işaretlerin yer aldığı popüler captcha ve anti-bot koruma sistemleri listesine başvurabilirsiniz.

Sitenizde TenDI (Tencent) kullanıldığını fark ederseniz, bir sonraki adım özelliklerini ve çalışma şeklini daha ayrıntılı incelemek olacaktır. Yine bu makalede, TenDI (Tencent) sisteminin entegrasyonuna ilişkin kılavuzu da bulabilir ve böylece sitenizde nasıl çalıştığını tamamen anlayabilirsiniz. Bu da yalnızca mevcut korumayı anlamanıza değil, aynı zamanda bakımını doğru şekilde planlamanıza da yardımcı olur.

TenDI CAPTCHA Nedir
TenDI CAPTCHA Nedir
TenDI (Tencent) CAPTCHA, botlara karşı çok katmanlı bir koruma sistemidir. Kullanıcı davranışlarını analiz eder ve özel mekanizmalarla sitenin ziyaretçisinin gerçek bir insan olup olmadığını doğrular. Kayıt, giriş, pazarlama kampanyaları ve spam/veri hırsızlığı önleme amacıyla kullanılır.
Background
TenDI (Tencent) örnekleri
Non-perception CAPTCHA
Non-perception CAPTCHA
Doğrulama kullanıcı müdahalesi olmadan otomatik olarak yapılır. Kullanım kolaylığının önemli olduğu senaryolar için idealdir.
Slider CAPTCHA
Slider CAPTCHA
Kaydırıcı sürükleyerek hızlı ve basit doğrulama. Çoğu durum için uygundur.
Graphic CAPTCHA
Graphic CAPTCHA
Kullanıcı, görüntü üzerindeki öğelere sırasıyla tıklar. Yüksek güvenlikli senaryolarda kullanılır.
Audio CAPTCHA
Audio CAPTCHA
Ses kaydı ile doğrulama. Özel gereksinimi olan kullanıcılar için uygundur.
Smart Verification
Smart Verification
Sistem kullanıcı davranışını değerlendirir: güvenilir olanlar hemen geçer, şüpheli olanlar ek doğrulamaya tabi tutulur.
Multi-dimensional Defense
Multi-dimensional Defense
Birden fazla koruma mekanizması kullanılır: dinamik şifreleme, anti-bot ve diğerleri.

Tencent CAPTCHA'yı CapMonster Cloud ile nasıl çözebilirsiniz

Tencent CAPTCHA form testlerinde, captcha'nın düzgün çalıştığını ve doğru entegre edildiğini doğrulamak sıklıkla gerekir.
Siteye eklediğiniz captchayı manuel olarak test edebilirsiniz:
  • Form sayfasını açın ve captcha'nın göründüğünü doğrulayın.
  • Captcha'yı geçmeden formu göndermeyi deneyin — sunucu bir hata döndürmelidir.
  • Captcha başarıyla çözüldükten sonra form hatasız gönderilmelidir.
Captcha'yı otomatik çözmek için CapMonster Cloud gibi özel servisler kullanabilirsiniz — bu araç captcha parametrelerini sunucularında işler ve hazır bir token döndürür. Bu token formda kullanılarak kullanıcı müdahalesi olmadan doğrulama geçilebilir.

CapMonster Cloud API ile çalışma genellikle şu adımlardan oluşur:

Görev oluşturmaGörev oluşturma
arrow
API isteği göndermeAPI isteği gönderme
arrow
Sonucu almaSonucu alma
arrow
Token'ı sayfaya yerleştirmeToken'ı sayfaya yerleştirme
arrow
Hazır kütüphanelerle TenDI (Tencent) CAPTCHA çözümü
CapMonster Cloud, Python, JavaScript (Node.js) ve C# için hazır kütüphaneler sunar.
Python
JavaScript
C#
Çözüm, belirteç ekleme ve form gönderimi
Node.js örneği ile sayfanızda captcha'yı tam döngü ile çözme. Yöntemler: HTML ve koruma sistemi parametrelerini almak için HTTP isteği gönderip yanıtı işleme veya örnekteki gibi otomasyon araçları (Playwright) kullanarak sayfayı açıp doğrulama bekleyip CapMonster Cloud istemcisine parametre gönderip sonucu alıp formdaki tokeni yerleştirme (testler için doğru veya yanlış verilerle).

// npx playwright install chromium

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

// Kendi değerleriniz ile değiştirin
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. Sayfayı açıyoruz
    await page.goto(WEBSITE_URL, { waitUntil: 'networkidle' });

    // 2. Captcha'nın görünmesini bekleyin (input veya iframe)
    await page.waitForSelector('#tendi_response, iframe[src*="tendi"], input[name="tendi_response"]', { timeout: 15000 });

    // Gerekirse websiteKey sayfadan çıkarılabilir
    const WEBSITE_KEY = await page.evaluate(() => {
        // Örnek: sitekey data-attribute veya global değişkende olabilir
        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 görevi oluşturun
    const tenDIRequest = new TenDIRequest({
        websiteURL: page.url(),
        websiteKey: WEBSITE_KEY,
    });

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

    // 4. Captcha'yı çözün
    const solution = await client.Solve(tenDIRequest);
    console.log("Solution:", solution);

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

    // 5. Çözüm sonucunu yerleştirme yöntemleri
    await page.evaluate(({ ticket, randstr }) => {
        // Input'a yerleştirme
        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 fonksiyonu
        if (typeof window.onCaptchaSolved === 'function') {
            window.onCaptchaSolved(ticket, randstr);
            inserted = true;
        }

        // Input veya callback yoksa
        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);
  
TenDI (Tencent) CAPTCHA'yı sitenize nasıl bağlarsınız
Captcha'nın sitenizde nasıl çalıştığını anlamak, doğrulama mantığını kavramak ve yeniden bağlamak veya yapılandırmak için bu bölümü incelemenizi öneririz. Entegrasyon sürecini açıklar ve tüm ayrıntıları hızlıca anlamanıza yardımcı olur.
  • 1. Hesabınıza giriş yapın veya Captcha Console üzerinden yeni hesap oluşturun.
  • 2. Verification Management bölümünü açın.
  • 3. Yeni bir captcha oluşturun (henüz yoksa).

Size iki parametre verilecektir: CaptchaAppId ve AppSecretKey. Bunları frontend ve sunucuda kullanacaksınız.

Frontend entegrasyon örneğiFrontend entegrasyon örneği
arrow

Entegrasyon nasıl çalışır

Adım 1: Captcha JS yükleme

Script dinamik olarak yüklenmelidir:

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

Standart olmayan yüklemeler veya cache captcha'nın hatalı çalışmasına neden olabilir.

Adım 2: TencentCaptcha nesnesini oluşturun

JS yüklendikten sonra global bir sınıf görünür:

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

Parametreler:

domElement - Checkbox/iframe’in yerleştirileceği container

CaptchaAppId - ID’niz

callback - Doğrulamadan sonra yapılacak işlemler

options - Görünüm ayarları (isteğe bağlı)

Adım 3: Metodu çağırın .show()

captcha.show();

Captcha’yı gösterir. Tekrar tekrar çağrılabilir.

Adım 4: Sonucu işleyin

Callback bir obje alır:


{
  ret: 0,              // 0 -- başarılı, 2 -- kullanıcı pencereyi kapattı
  ticket: "...",       // sunucuya gerekli
  randstr: "...",      // sunucuya da gerekli
  errorCode: 1001,     // captcha yüklenmediyse
  errorMessage: "..."  // hata mesajı
}

Sunucuda ticket ikinci doğrulaması mutlaka yapılmalıdır.

"Acil durum modu"

Captcha yüklenmezse (örneğin CDN erişilemez), iş sürecini bozmamak için otomatik 'acil bilet' oluşturabilirsiniz.

Senaryo:

  • Captcha oluşturmayı denedik → hata.
  • Çağırıyoruz loadErrorCallback().
  • Ticket oluşturuyoruz:
    trerror_<errorcode>_<appid>_<timestamp>
  • İşleme normal şekilde devam ediyoruz, ancak sunucu bunun acil bilet olduğunu görür ve ne yapılacağına karar verir.

AppId Şifreleme (opsiyonel)

Maksimum koruma için captcha’ya açık AppId yerine şifreli sürümünü gönderebilirsiniz:

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

Gerekli:

  • 32 bayt anahtar (AppSecretKey → 32 bayta tamamlanır)
  • AES-256 CBC + PKCS7Padding
  • 16 bayt IV
  • timestamp ve geçerlilik süresi (saniye)

Sunucu tarafı şifreleme örneği (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")

Sunucu Doğrulaması

Adım 1. API erişimini yapılandırma

Anahtar yönetimi panelinden (CAM / API Key Management) API için SecretId ve SecretKey alın. İmzalı istekler için gereklidir.

Adım 2. API DescribeCaptchaResult çağırma

İstemci ticket ve randstr döndükten sonra sunucu istek gönderir:

  • Action: DescribeCaptchaResult
  • Version: 2019-07-22 (veya geçerli)

Parametreler:

CaptchaType - 9 (sabit değer)

Ticket - string — istemciden dönen ticket

Randstr - string — istemciden dönen randstr

CaptchaAppId - AppId’niz

AppSecretKey - Gizli anahtarınız

UserIp - Kullanıcı IP (önerilir)

Adım 3. Yanıtı işleme

API döndürür:

  • CaptchaCode: integerdoğrulama sonucu
  • 0 (veya OK) — captcha geçerli, ticket geçerli

Eğer CaptchaCode === OK, kullanıcı doğrulanmış kabul edilir. Aksi takdirde — reddet.

Örnek — Node.js'de ticket doğrulama


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", // gerekiyorsa bölge
});

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

Tencent CAPTCHA'yı sitenize bağlama hakkında daha fazla bilgi için resmi dokümantasyona bakabilirsiniz.

Background
Olası hatalar ve hata ayıklama
Bug Icon
Captcha yüklenmiyor
(1001, 1002 hataları veya geçersiz imza mesajı) — neden, hatalı istek parametreleri olabilir. CaptchaAppId, AppSecretKey ve tüm istek parametrelerinin doğru şekilde belirtildiğinden emin olun.
Bug Icon
Geçersiz veya boş ticket/randstr
İstemcinin her iki parametreyi de doğru şekilde gönderdiğinden emin olun.
Bug Icon
Çözüm zaman aşımı
Sunucu tarafında bekleme süresini artırın.
Korumanın dayanıklılığını test etme
Entegrasyondan sonra, korumanın doğru şekilde çalıştığından emin olmak önemlidir.
Güvenlik ve optimizasyon önerileri
<b>AppSecretKey</b> yalnızca sunucuda saklanmalı, tarayıcıya gönderilmemeli ve JS koduna dahil edilmemelidir.
Tencent CAPTCHA'nın tüm yanıtlarını, hata kodu, istek zamanı ve doğrulama parametreleri dahil olmak üzere kaydedin — sorunları daha hızlı teşhis etmeye yardımcı olur.
Tüm parametreleri <b>(ticket, randstr)</b> gönderirken HTTPS kullanın, sahtekarlığı önlemek için.
Sayfada lisans gereği doğru <b>Gizlilik Politikası</b> ve <b>Tencent Kullanım Şartları</b> linkleri bulundurun.
Sonuç

Kodu üzerinde erişiminiz olmayan, ancak üzerinde zaten bir captcha veya başka bir koruma sistemi kurulmuş bir site devraldıysanız, sorun değil! Hangi teknolojinin kullanıldığını tespit etmek oldukça kolaydır. Çalışmanın düzgün olup olmadığını kontrol etmek için ise, izole bir test ortamında CapMonster Cloud tanıma servisinden yararlanarak, jeton işleme mekanizmasının ve doğrulama mantığının doğru şekilde çalıştığından emin olabilirsiniz.

TenDI (Tencent) söz konusu olduğunda, sistemi tanımlamak, davranışını incelemek ve korumanın düzgün çalıştığını doğrulamak yeterlidir. Bu yazıda, TenDI (Tencent) nasıl tespit edilir ve entegrasyonu ya da yeniden yapılandırılması için talimatların nerede bulunabileceği gösterdik; böylece korumayı güvenle sürdürebilir ve çalışmasını kontrol altında tutabilirsiniz.

Conclusion