TenDI (Tencent) CAPTCHA
ve CapMonster Cloud

Captcha çözümü, siteye kurulum ve testler.

TenDI (Tencent) çözümünün fiyatlandırması

CAPTCHA
Fiyat (USD)
$ 1.60
1000 jeton
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
<span class="font-bold">AppSecretKey</span> 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 <span class="font-bold">(ticket, randstr)</span> gönderirken HTTPS kullanın, sahtekarlığı önlemek için.
Sayfada lisans gereği doğru <span class="font-bold">Gizlilik Politikası</span> ve <span class="font-bold">Tencent Kullanım Şartları</span> 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

TenDI (Tencent) CAPTCHA hakkında sık sorulan sorular

TenDI, farklı risk seviyelerine ve kullanıcı deneyimi ihtiyaçlarına uygun çeşitli challenge türleri sunar.

  • Non-Perception — düşük sürtünmeli doğrulama için arka planda sessizce çalışır.
  • Slider — standart görünür kontroller için sürükle-tamamla bulmacası kullanır.
  • Graphic — kullanıcıdan belirli şekillere tıklamasını ister; daha yüksek riskli trafik için uygundur.
  • Audio — görsel challenge'lara erişilebilir bir alternatif sunar.
  • Smart Verification — güvenilir kullanıcıların sessizce geçmesine izin verir ve yalnızca şüpheli oturumlarda challenge gösterir.

TenDI ayrıca bot direncini artıran 10 arka plan koruma mekanizmasından oluşan Multi-dimensional Defense içerir. CapMonster Cloud için sayfada hangi challenge gösterilirse gösterilsin her zaman type: CustomTask ve class: "TenDI" kullanın. Daha fazla API ayrıntısı için buraya bakın.

İstemciniz bir ticket ve randstr döndürdükten sonra sunucunuz bunları Tencent DescribeCaptchaResult API'sini çağırarak doğrulamalıdır. Ticket'ı doğrulamak için bu parametrelerle imzalı bir API isteği gönderin:

  • CaptchaType: 9
  • Ticket: istemci tarafından döndürülen ticket
  • Randstr: istemci tarafından döndürülen randstr
  • CaptchaAppId: AppId'niz
  • AppSecretKey: captcha gizli anahtarınız
  • UserIp: kullanıcının IP adresi (önerilir)

Sunucunuzun isteği imzalamak için Tencent Cloud API kimlik bilgilerine (SecretId ve SecretKey) de ihtiyacı vardır.

Yanıttaki CaptchaCode değerini kontrol edin:

  • 0 veya OK: captcha geçildi, ticket geçerli
  • başka herhangi bir değer: doğrulama başarısız, istek reddedilmelidir
  • AppSecretKey'i asla frontend kodunda açığa çıkarmayın.
  • Sunucu tarafında Tencent'in şifreli CaptchaAppId akışını kullanın. İstemciye göndermek için şifreli değeri backend'de oluşturun.
  • CAPTCHA çözüldükten sonra ticket ve randstr'i istemciden backend'e göndererek DescribeCaptchaResult API'si ile doğrulayın.
  • Tüm gizli bilgileri ve doğrulama mantığını backend'de tutun.

Adım adım kurulum için bu sayfanın üst kısmındaki TenDI (Tencent) CAPTCHA'yı sitenize nasıl bağlarsınız bölümüne bakın.

Tencent istemci tarafı entegrasyon akışında TenDI, widget başlatmada düz CaptchaAppId'nin yerini alan isteğe bağlı aidEncrypted parametresini destekler.

aidEncrypted şu şekilde oluşturulur: aidEncrypted = Base64(IV + ciphertext)

ciphertext, AppId'nizi, geçerli Unix zaman damgasını ve ttl (saniye cinsinden sona erme süresi) içeren bir dizenin şifrelenmesinin sonucudur. Şifreleme PKCS7 dolgusu ile AES-256-CBC kullanır.

Her istek için rastgele 16 baytlık bir IV oluşturulur ve şifreli çıktının başına eklenir.

Son ikili değer, widget'a aidEncrypted olarak iletilmeden önce Base64 ile kodlanır.

Tencent CAPTCHA betiği yüklenemez veya başlatılamazsa TenDI Disaster Recovery modu isteği engellemek yerine kullanıcı akışının devam etmesine izin verir.

  • CAPTCHA JavaScript'i yüklenemediğinde veya başlatılamadığında, örneğin ağ veya CDN sorunu nedeniyle loadErrorCallback() çağırın.
  • Bu, trerror_<errorcode>_<CaptchaAppId>_<timestamp> formatında bir disaster recovery ticket'ı oluşturur.
  • Ticket, normal callback akışıyla ret: 0 (başarı) ile döndürülür.
  • Sunucu tarafında ret: 0'ı tek başına normal başarı olarak değerlendirmeyin. Disaster recovery modunu tespit etmek için ticket önekini (trerror_) ve errorCode = 1001 değerini de kontrol edin.

Bunun güvenilir çalışması için CAPTCHA betiğini yüklemeden önce hata işleyicisini tanımlayın ve JS yükleme hatası oluştuğunda çağırın.