logo
bars

ALTCHA
ve CapMonster Cloud

Captcha çözümü, siteye kurulum ve test.
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 ALTCHA kullanıldığını fark ederseniz, bir sonraki adım özelliklerini ve çalışma şeklini daha ayrıntılı incelemek olacaktır. Yine bu makalede, ALTCHA 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.

ALTCHA Nedir
ALTCHA Nedir
ALTCHA (Alternative CAPTCHA), web sitelerini botlar ve spamdan koruyan bir sistemdir. Gerçek kullanıcıları otomatik programlardan ayırt etmeye yardımcı olur ve sitenin güvenli ve stabil çalışmasını sağlar. ALTCHA, geleneksel CAPTCHA'lara modern bir alternatiftir: hafif bir kriptografik görev (proof-of-work) kullanır ve çerez toplamaz veya kullanıcıları takip etmez.
Background
ALTCHA örnekleri
Proof-of-Work (PoW)
Proof-of-Work (PoW)
Sistem varsayılan olarak Proof-of-Work (PoW) doğrulama yöntemini kullanır, görsel bulmacaları ve rahatsız edici kontrolleri ortadan kaldırır. Bu yaklaşım güvenliği kullanıcı dostu bir şekilde birleştirir ve çoğu ziyaretçi için uygun, göze batmayan bir Captcha çözümü sunar.
Code Captcha
Code Captcha
Koruma, metin tabanlı captcha çözümüne kadar artırılabilir.
Invisible Captcha
Invisible Captcha
Doğrulama, görünür bir widget olmadan gerçekleşir ve kullanıcıdan herhangi bir işlem yapması beklenmez.

CapMonster Cloud üzerinden ALTCHA nasıl çözülür

ALTCHA içeren formları test ederken, captchanın düzgün çalıştığını ve doğru entegre edildiğini doğrulamanız gerekir.

Sitenize yerleştirilen captchayı manuel olarak test edebilirsiniz.

  • Form sayfasını açın ve captchanın görüntülendiğinden emin olun.
  • Çözmeden form göndermeyi deneyin — sunucu hata döndürmelidir.
  • Başarılı çözümlerden sonra form sorunsuz gönderilmelidir.

Otomatik çözüm için CapMonster Cloud gibi araçlar kullanabilirsiniz. Captcha parametrelerini alır, kendi sunucularında işler ve hazır bir token döndürür. Bu tokenı forma ekleyerek kullanıcı müdahalesi olmadan doğrulamayı geçebilirsiniz.

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
Token çözümü, ekleme ve form gönderimi
Node.js örneği ile web sayfanızda captcha tanıma için tam döngü. Olası yaklaşımlar: HTML ve captcha parametrelerini almak için HTTP istekleri kullanmak, yanıtı göndermek ve sonucu işlemek; veya otomasyon araçlarıyla (ör: Playwright) — sayfayı açmak, captcha’yı beklemek, parametreleri göndermek (test için doğru veya yanlış veri gönderebilirsiniz), CapMonster Cloud istemcisi üzerinden sonucu almak, tokeni forma eklemek ve sonucu görmek.
// npm install playwright
// npx playwright install chromium

const { chromium } = require("playwright");

const API_KEY = "YOUR_API_KEY";
const ALTCHA_PAGE = "https://example.com"; // ALTCHA bulunan siteniz

(async () => {
  const browser = await chromium.launch({ headless: false, devtools: true });
  const context = await browser.newContext();
  const page = await context.newPage();

  // Altcha endpoint’ten tüm yanıtları yakalıyoruz
  let challengeResp = null;
  page.on("response", async (response) => {
    try {
      const url = response.url();
      if (url.startsWith("https://captcha.example.com/altcha")) { // Altcha endpoint
        challengeResp = await response.json();
        console.log("Captured Altcha response:", challengeResp);
      }
    } catch (err) {
      console.warn("Error parsing Altcha response:", err);
    }
  });

  await page.goto(ALTCHA_PAGE, { waitUntil: "networkidle" });

  // Varlığı varsa widget’a tıklayın
  const widgetHandle = await page.$("altcha-widget");
  if (widgetHandle) {
    try {
      await widgetHandle.click();
    } catch {}
  }

  // Challenge’ın gelmesini bekliyoruz
  const start = Date.now();
  while (!challengeResp && Date.now() - start < 60000) { // Timeout artırıldı
    await new Promise((r) => setTimeout(r, 300));
  }

  if (!challengeResp) {
    console.error("Failed to capture Altcha challenge.");
    await browser.close();
    return;
  }

  const { challenge, salt, signature, maxnumbers } = challengeResp;

  // CapMonster Cloud’da görev oluştur
  const createTaskBody = {
    clientKey: API_KEY,
    task: {
      type: "CustomTask",
      class: "altcha",
      websiteURL: ALTCHA_PAGE,
      websiteKey: "",
      userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36",
      metadata: {
        challenge,
        iterations: maxnumbers || 100000,
        salt,
        signature,
      },
    },
  };

  const taskResp = await fetch("https://api.capmonster.cloud/createTask", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(createTaskBody),
  }).then((r) => r.json());

  console.log("CreateTask response:", taskResp);
  if (!taskResp?.taskId) {
    console.error("CreateTask failed:", taskResp);
    await browser.close();
    return;
  }

  const taskId = taskResp.taskId;

  // Çözümü al
  let fullSolution = null;
  const pollStart = Date.now();
  while (Date.now() - pollStart < 120000) {
    const res = await fetch("https://api.capmonster.cloud/getTaskResult", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ clientKey: API_KEY, taskId }),
    }).then((r) => r.json());

    if (res.status === "ready") {
      fullSolution = res.solution;
      console.log("Solution:", fullSolution);
      break;
    }
    await new Promise((r) => setTimeout(r, 3000));
  }

  if (!fullSolution) {
    console.error("No solution received in time.");
    await browser.close();
    return;
  }

  const token = fullSolution?.data?.token || fullSolution?.token || fullSolution?.data;

  if (!token) {
    console.error("Token not found in solution:", fullSolution);
    await browser.close();
    return;
  }

  //Tokeni ekle
  await page.evaluate((t) => {
    let input = document.querySelector("#captchaParaValidar");
    if (!input) {
      input = document.createElement("input");
      input.type = "hidden";
      input.id = "captchaParaValidar";
      input.name = "captchaParaValidar";
      (document.querySelector("form") || document.body).appendChild(input);
    }
    input.value = t;

    let alt = document.querySelector('input[name="altcha"]');
    if (!alt) {
      alt = document.createElement("input");
      alt.type = "hidden";
      alt.name = "altcha";
      (document.querySelector("form") || document.body).appendChild(alt);
    }
    alt.value = t;

    const widget = document.querySelector("altcha-widget");
    if (widget) {
      widget.setAttribute("data-state", "verified");
      const checkbox = widget.querySelector("input[type='checkbox']");
      if (checkbox) {
        checkbox.checked = true;
        checkbox.dispatchEvent(new Event("change", { bubbles: true }));
      }
      const label = widget.querySelector(".altcha-label");
      if (label) label.textContent = "Verified";
    }
  }, token);

  console.log("Token injected:", token);
})();
ALTCHA’yı sitenize nasıl bağlarsınız
Captcha’nın sitenizde nasıl çalıştığını, doğrulama mantığını anlamak, yeniden bağlamak veya yeniden yapılandırmak için bu bölümü incelemenizi öneririz. Koruma entegrasyon sürecini açıklar ve tüm ayrıntıları hızlıca anlamanıza yardımcı olur.

1. Widget Kurulumu

Seçenek 1 — CDN üzerinden (en kolay). HTML <head> kısmına ekleyin:

<script async defer src="https://cdn.jsdelivr.net/gh/altcha-org/altcha/dist/altcha.min.js" type="module"></script>

Seçenek 2 — npm üzerinden:

npm install altcha

Widget’i JS dosyanıza import edin:

import "altcha";

2. Widget’ı forma ekleyin.

<altcha-widget> bileşenini koruma gereken form alanına ekleyin:


<form method="POST" action="/submit">
  <altcha-widget challengeurl="/altcha/challenge"></altcha-widget>
  <button type="submit">Send</button>
</form>

challengeurl — görev (challenge) vermek için sunucu endpoint’iniz.

ALTCHA Sentinel (hazır sunucu bot ve spam koruması, makine öğrenimi ve trafik analizi ile) kullanıyorsanız, kendi sunucunuz yerine URL’ini kullanın:


<altcha-widget 
  challengeurl="https://sentinel.example.com/v1/challenge?apiKey=YOUR_API_KEY">
</altcha-widget>

3. Sunucu doğrulaması.

Doğrulama nasıl gerçekleşir:

  • 1) Widget payload oluşturur — Base64 ile kodlanmış JSON, genellikle altcha form alanı olarak gönderilir.
  • 2) Sunucuda payload kriptografik olarak doğrulanır (ek API çağrısı gerekmez).
  • 3) Başarılı doğrulamadan sonra form işlenebilir.

ALTCHA Sentinel ile doğrulama:

Kütüphane kullanılarakKütüphane kullanılarak
arrow

Sentinel HTTP API üzerinden (kütüphane yoksa):Sentinel HTTP API üzerinden (kütüphane yoksa):
arrow

4. Sentinel olmadan doğrulama (kendi sunucunuz)

Challenge oluşturma:


import { createChallenge } from 'altcha-lib';

const hmacKey = '$ecret.key'; // Sizin HMAC gizli anahtarınız

const challenge = await createChallenge({ hmacKey });

// Widget için JSON formatında challenge döndürme

Form gönderilirken payload doğrulama:


import { verifySolution } from 'altcha-lib';

const hmacKey = '$ecret.key'; // Sizin HMAC gizli anahtarınız

const verified = await verifySolution(payload, hmacKey);

if (verified) {
  // Doğrulama başarılı — form verileri işlenir
}

Bu durumda, /altcha/challenge endpoint’ini kendiniz oluşturur ve görevleri sunucuda doğrularsınız.

Background
Olası hatalar ve hata ayıklama
Bug Icon
Geçersiz challengeurl veya API Key
Widget yüklenmiyor veya doğrulamada hata dönüyor.
Bug Icon
Çözüm zaman aşımı
Sunucu payload’u kontrol edemedi. Bekleme süresini artırın veya sunucu tarafı doğrulamanın düzgün çalıştığından emin olun.
Bug Icon
Boş payload
Widget’tan sunucuya sonuç gönderirken hata oluştu.
Bug Icon
Verification failed
Payload süresi dolmuş, tekrar kullanılmış veya sahte. Tanılama için loglamayı açın ve sunucu veya Sentinel yanıtındaki verified ve verificationData alanlarını kontrol edin.
Korumanın dayanıklılığını test etme
Entegrasyondan sonra sistemin gerçekten otomatik işlemleri engellediğinden emin olun.
Güvenlik ve optimizasyon önerileri
<b>Gizli anahtarları</b> (Sentinel için HMAC veya API Key) yalnızca sunucuda saklayın — frontend’e göndermeyin.
<b>Hataları</b> ve doğrulama olaylarını (<b>verified: false</b> ve <b>verificationData</b>) kaydederek başarısız kontrollerin nedenlerini anlayın.
Şeffaflık ve kullanıcı güveni için, <b>gizlilik politikası</b> ve <b>ALTCHA kullanım şartları</b> bağlantılarını ekleyin, gerekiyorsa.
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.

ALTCHA 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, ALTCHA 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
Faydalı bağlantılar
DocIconALTCHA DokümantasyonuDocIconALTCHA Kaynak KoduDocIconCapMonster Cloud Dokümantasyonu (ALTCHA ile çalışma)