Explainers

Matematik ve Mantık CAPTCHA Türlerinin Açıklaması

Bir iletişim formunda "7 + 3 kaç eder?" ya da "Gökyüzü ne renk?" gibi bir soruyla karşılaştıysanız, karşınızda en eski CAPTCHA ailelerinden biri var: matematik ve mantık CAPTCHA'ları. Otomasyon açısından iyi haber şu — bu türler yalnızca iki temel biçimde gelir ve her ikisi de programlı olarak çözülebilir. Denklem HTML metni olarak basılıyorsa doğrudan sayfa kaynağından okursunuz; bir görüntüye gömülüyse OCR ile metne çevirip hesaplarsınız. WordPress siteleri ve eski uygulamalar bunları hâlâ yaygın kullandığından, hangi biçimle uğraştığınızı ayırt etmek entegrasyonunuzu hızlandırır.


Matematik ve mantık CAPTCHA türleri: 5 ana biçim

Pratikte bu doğrulamalar beş biçimde karşınıza çıkar. Aşağıdaki tablo her biçimi tipik bir örnekle ve otomasyonda izlemeniz gereken çözüm yöntemiyle eşleştirir.

Biçim Örnek soru Otomasyonda çözüm yöntemi
Temel aritmetik "3 + 5 nedir?", "6 × 7 =?" Düz metinse regex/DOM ayrıştırması; görüntüyse OCR
Görüntüye gömülü matematik Bozuk yazı tipiyle "14 + 23 =?" gösteren görüntü OCR ile denklemi okuyun, sonra hesaplayın
Kelimeyle yazılmış matematik "Yedi artı üç kaç eder?" NLP ayrıştırmasıyla kelimeleri sayıya çevirin, hesaplayın
Mantık soruları "Çim ne renk?", "Bir köpeğin kaç bacağı vardır?" Sabit soru havuzundan soru-cevap eşlemesi
Sayı dizisi (pattern) "Sonra ne geliyor: 2, 4, 6, 8, ?" Örüntü tanıma mantığı

Aritmetik biçimler açık ara en yaygın olanıdır; kelime, mantık ve dizi varyantları ise daha nadirdir ve genellikle küçük, sabit bir havuzdan çekilir.


Matematik CAPTCHA'sı teknik olarak nasıl çalışır?

Mantık basittir: sunucu bir denklem üretir, doğru cevabı oturumda saklar ve gönderdiğiniz yanıtı karşılaştırır. Tek fark, denklemin metin mi yoksa görüntü olarak mı sunulduğudur — bu da otomasyonda izleyeceğiniz yolu belirler.

Metin tabanlı akış

Denklem düz HTML olduğunda istemci onu doğrudan okuyabilir:

Server generates random equation (e.g., "7 + 3")
    ↓
Stores answer (10) in server-side session
    ↓
Renders equation as HTML text or image
    ↓
User submits answer via form field
    ↓
Server compares submitted answer to stored answer
    ↓
Match → Form submitted     Mismatch → Error shown

Görüntü tabanlı akış

Denklem bozulmuş bir görüntü olduğunda, önce görüntüyü metne çevirmeniz gerekir:

Server generates random equation
    ↓
Renders equation into a distorted image (noise, lines, color shifts)
    ↓
Image served to client via <img> tag
    ↓
User reads image, computes answer, types in form field
    ↓
Server validates submitted answer

Otomasyonda matematik CAPTCHA'sını tespit etme

Bir CAPTCHA'yı çözmeden önce türünü belirlemeniz gerekir. Aşağıdaki iki örnek bir sayfayı tarar ve metin tabanlı matematik sorularını, CAPTCHA görüntülerini ve mantık sorularını ayrı ayrı işaretler.

Python ile tespit

import requests
from bs4 import BeautifulSoup
import re

def detect_math_captcha(url):
    """Detect common math CAPTCHA patterns on a page."""
    response = requests.get(url, timeout=10)
    soup = BeautifulSoup(response.text, "html.parser")
    html = response.text.lower()

    indicators = {
        "text_math": False,
        "image_math": False,
        "logic_question": False,
    }

    # Check for text-based math questions
    math_patterns = [
        r"what is \d+\s*[\+\-\×\*]\s*\d+",
        r"\d+\s*[\+\-\×\*]\s*\d+\s*=\s*\?",
        r"solve:\s*\d+",
        r"type the (result|answer|sum)",
    ]
    for pattern in math_patterns:
        if re.search(pattern, html):
            indicators["text_math"] = True
            break

    # Check for CAPTCHA images near math-related labels
    captcha_images = soup.find_all("img", attrs={
        "alt": re.compile(r"captcha|math|verify", re.I)
    })
    if captcha_images:
        indicators["image_math"] = True

    # Check for logic questions
    logic_patterns = [
        r"what color is",
        r"how many legs",
        r"what comes next",
        r"is .+ hot or cold",
    ]
    for pattern in logic_patterns:
        if re.search(pattern, html):
            indicators["logic_question"] = True
            break

    return indicators

result = detect_math_captcha("https://example.com/contact")
print(result)

Node.js ile tespit

const axios = require("axios");
const cheerio = require("cheerio");

async function detectMathCaptcha(url) {
    const { data: html } = await axios.get(url, { timeout: 10000 });
    const $ = cheerio.load(html);
    const lower = html.toLowerCase();

    const indicators = {
        textMath: false,
        imageMath: false,
        logicQuestion: false,
    };

    // Text-based math patterns
    const mathPatterns = [
        /what is \d+\s*[+\-×*]\s*\d+/,
        /\d+\s*[+\-×*]\s*\d+\s*=\s*\?/,
        /solve:\s*\d+/,
        /type the (result|answer|sum)/,
    ];

    for (const pattern of mathPatterns) {
        if (pattern.test(lower)) {
            indicators.textMath = true;
            break;
        }
    }

    // Check for CAPTCHA images
    $("img").each((_, el) => {
        const alt = ($(el).attr("alt") || "").toLowerCase();
        if (/captcha|math|verify/.test(alt)) {
            indicators.imageMath = true;
        }
    });

    return indicators;
}

detectMathCaptcha("https://example.com/contact").then(console.log);

OCR ile görüntü tabanlı matematik CAPTCHA'sını çözme

Denklem görüntü olarak sunulduğunda metin ayrıştırması işe yaramaz. OCR görüntüdeki denklemi metne çevirir, basit bir ayrıştırıcı da sonucu hesaplar. Aşağıdaki örnek görüntüyü CaptchaAI'nin OCR uç noktasına gönderir ve dönen denklemi çözer.

CaptchaAI OCR ile örnek çözüm

import requests
import time
import re

API_KEY = "YOUR_API_KEY"
CAPTCHA_IMAGE_URL = "https://example.com/captcha.png"

# Download the CAPTCHA image
image_data = requests.get(CAPTCHA_IMAGE_URL).content

# Submit to CaptchaAI OCR
import base64
b64_image = base64.b64encode(image_data).decode()

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "base64",
    "body": b64_image,
    "json": 1,
})

task_id = submit.json().get("request")

# Poll for result
for _ in range(30):
    time.sleep(3)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    })
    data = result.json()
    if data.get("status") == 1:
        ocr_text = data["request"]  # e.g., "7 + 3"
        print(f"OCR result: {ocr_text}")

        # Parse and compute the answer
        match = re.match(r"(\d+)\s*([+\-*/×])\s*(\d+)", ocr_text)
        if match:
            a, op, b = int(match.group(1)), match.group(2), int(match.group(3))
            ops = {"+": a + b, "-": a - b, "*": a * b, "×": a * b, "/": a // b}
            answer = ops.get(op)
            print(f"Answer: {answer}")
        break
    elif "CAPCHA_NOT_READY" in str(data):
        continue

Matematik CAPTCHA'ları diğer türlerle karşılaştırma

Matematik CAPTCHA'ları hızlıdır ama bot direnci düşüktür; davranışsal sistemlerle fark nettir:

Özellik Matematik CAPTCHA reCAPTCHA v2 hCaptcha Kaydırma CAPTCHA
Kullanıcı sürtünmesi Düşük (hızlı zihinsel işlem) Orta (görsel seçimi) Orta (görsel seçimi) Düşük (tek sürükleme)
Bot direnci Çok düşük Yüksek Yüksek Orta
Erişilebilirlik İyi (metin tabanlı sürümler) Zayıf (görmeye bağlı) Zayıf (görmeye bağlı) Zayıf (motor becerisine bağlı)
Maliyet Ücretsiz (kendi sunucunuzda) Ücretsiz katman mevcut Ücretsiz katman mevcut Değişir
Yaygın kullanım WordPress, iletişim formları Giriş, kayıt Giriş, kayıt E-ticaret, Asya

Matematik CAPTCHA'sını ne zaman değiştirmelisiniz?

Formunuz yalnızca kaba spam alıyorsa matematik CAPTCHA'sı yeterli olabilir. Ancak hedefli botlar, sahte kayıtlar veya kaba kuvvet denemeleriyle karşılaşıyorsanız davranışsal bir sisteme geçmek gerekir — düz metin denklemleri saniyeler içinde ayrıştırılabildiği için gerçek bir engel oluşturmaz.


Matematik CAPTCHA'ları neden hâlâ tercih ediliyor?

  1. Basitlik — Harici API bağımlılığı veya JavaScript SDK'sı gerektirmez.
  2. WordPress eklentileri — "Math CAPTCHA" ve "Really Simple CAPTCHA" gibi eklentiler yaygın kuruludur.
  3. Düşük sürtünme — Kullanıcılar basit bir işleme görsel seçmeye kıyasla daha hızlı yanıt verir.
  4. Erişilebilirlik — Metin tabanlı sürümler, görsel CAPTCHA'ların aksine ekran okuyucularla çalışır.
  5. Eski sistemler — Modern CAPTCHA servislerinden önceki uygulamalar bunları sürdürür.

Türkiye pazarında nerede karşınıza çıkar?

Türkiye'deki KOBİ sitelerinin önemli bir kısmı WordPress üzerinde çalışır ve iletişim formlarında matematik CAPTCHA eklentileri sıktır. Bir müşteri için QA otomasyonu yazan serbest geliştiriciler (örneğin Bionluk veya Upwork üzerinden çalışanlar) bu engelle sürekli karşılaşır. Akışı staging.example.com/qa-form gibi bir test ortamında kurup denklemin türüne göre iki yol izlemek en temiz yaklaşımdır. Formlarınız kişisel veri topluyorsa bunun KVKK kapsamına girdiğini unutmayın.


Sık sorulan sorular

Görüntü tabanlı ile metin tabanlı matematik CAPTCHA'sını nasıl ayırt ederim?

Sayfa kaynağına bakın: denklem <img> etiketiyle geliyorsa görüntü tabanlıdır ve OCR gerekir; doğrudan HTML metni olarak yer alıyorsa metin tabanlıdır. Yukarıdaki tespit örnekleri bu ayrımı otomatik işaretler.

Metin tabanlı matematik CAPTCHA'sı OCR olmadan çözülebilir mi?

Evet. Denklem HTML metni olarak (görüntü değil) basılmışsa, düzenli ifade (regex) veya DOM ayrıştırmasıyla doğrudan sayfa kaynağından okuyabilirsiniz; OCR'ye gerek kalmaz.

Mantık soruları ve sayı dizileri otomasyonda nasıl ele alınır?

Mantık soruları genellikle sabit bir soru havuzundan geldiği için soru-cevap eşlemesi çıkarmak çoğu zaman yeterlidir; sayı dizileri ise basit bir örüntü tanıma mantığı gerektirir. İkisi de aritmetik CAPTCHA'lardan daha nadirdir.

Matematik CAPTCHA'sını daha güçlü bir sistemle değiştirmeli miyim?

Düşük sürtünme ve güçlü bot tespitini birlikte istiyorsanız Cloudflare Turnstile iyi bir seçenektir; görünmez çalışır ve kullanıcı etkileşimi gerektirmez. Puana dayalı değerlendirme için reCAPTCHA v3 uygundur.


Özet

Matematik ve mantık CAPTCHA'ları, WordPress iletişim formlarında ve eski sistemlerde en sık rastlanan en basit doğrulama türüdür. Metin tabanlı sürümler doğrudan HTML'den ayrıştırılır; görüntü tabanlı sürümler denklemi okumak için OCR'yi, ardından basit aritmetiği gerektirir. Görüntü tabanlı olanlar için denklemi çıkarıp çözmek üzere CaptchaAI Görüntü OCR API'sini kullanabilirsiniz. Bot direnci düşük olsa da, matematik CAPTCHA'ları basitlikleri ve erişilebilirlik avantajları sayesinde hâlâ tercih ediliyor.

İlgili Makaleler

Bu makale için yorumlar devre dışı bırakılmıştır.