الشروحات المعمقة

شرح أنظمة CAPTCHA غير المرئية: كيف تعمل

يمرّ نموذجك في المتصفح بلا أي عائق ظاهر، ثم يفشل الطلب نفسه داخل سكربت الأتمتة دون رسالة خطأ واضحة. في الغالب السبب اختبار CAPTCHA غير مرئي يعمل في الخلفية: لا مربع اختيار، ولا شبكة صور، ولا نص للكتابة، بل تقييم صامت لسلوك المتصفح وبصمة الجهاز وسمعة عنوان IP منذ لحظة تحميل الصفحة. تُصدر هذه الأنظمة رمز (token) تحقق يجب إرساله مع النموذج؛ وإذا غاب الرمز أو كان غير صالح، يُرفض الطلب بصمت. نشرح هنا آلية أبرزها — reCAPTCHA v3 وTurnstile وreCAPTCHA v2 غير المرئية — وكيف تكتشفها وتولّد رموزها عبر CaptchaAI.

إجابات سريعة قبل التفاصيل

السؤال الإجابة المختصرة
لماذا لا أرى أي كابتشا على الصفحة؟ لأن التحقق يجري في الخلفية ولا يظهر إلا عند ارتفاع درجة المخاطرة
هل ما زلت بحاجة إلى رمز (token)؟ نعم؛ حتى الأنظمة غير المرئية تُصدر توكن أو نتيجة تحقق لكل إجراء
ما الأكثر انتشاراً اليوم؟ reCAPTCHA v3 وCloudflare Turnstile
كيف أتعامل معها في الأتمتة؟ اكتشف المزوّد من HTML أو الشبكة، ثم اطلب التوكن المناسب من CaptchaAI

متى تصطدم بالأنظمة غير المرئية؟

تظهر في المسارات التي تصدّ الروبوتات دون إزعاج المستخدم:

  • نماذج التسجيل وتسجيل الدخول في المتاجر والمنصّات.
  • مسار إتمام الشراء وبوابات الدفع.
  • نماذج التواصل وإنشاء التذاكر.
  • واجهات API العامة التي تحميها صفحة تحقق أمامية.

كيف يجري التحقق في الأنظمة غير المرئية

تشترك جميع أنظمة CAPTCHA غير المرئية في نمط واحد: تبدأ بجمع الإشارات فور تحميل الصفحة، ثم تمرّرها إلى محرّك تقييم المخاطر ليقرّر ما إذا كان الزائر إنساناً أم روبوتاً:

Page loads → CAPTCHA JavaScript injected
    ↓
Script runs in background, collecting signals:
  ├─ Browser fingerprint (canvas, WebGL, fonts, plugins)
  ├─ Behavioral data (mouse, keyboard, scroll, timing)
  ├─ Network data (IP reputation, TLS fingerprint)
  ├─ Device data (screen, GPU, CPU cores, memory)
  └─ History data (cookies, previous CAPTCHA completions)
    ↓
Signals sent to CAPTCHA provider's risk engine
    ↓
Risk score computed
    ↓
Response varies by score:
  ├─ Low risk  → Token issued silently (user sees nothing)
  ├─ Medium    → Light challenge shown (checkbox, simple click)
  └─ High risk → Full challenge (image grid) or block

تنقسم الإشارات المجمَّعة إلى أربع فئات رئيسية:

  • بصمة المتصفح: canvas وWebGL والخطوط والإضافات.
  • البيانات السلوكية: حركة الفأرة والكتابة والتمرير والتوقيت.
  • بيانات الشبكة: سمعة عنوان IP وبصمة TLS.
  • بيانات الجهاز والسجل: الشاشة وعدد الأنوية والذاكرة والكوكيز السابقة.

الفارق الجوهري عن الكابتشا المرئية أن التقييم يعمل باستمرار منذ تحميل الصفحة، لا عند النقر على مربع الاختيار فقط.


أبرز أنظمة CAPTCHA غير المرئية

1. reCAPTCHA v3

  • المزود: Google
  • سنة الإطلاق: 2018
  • الحصة السوقية: الأعلى بين الأنظمة غير المرئية

تُعيد reCAPTCHA v3 درجة عشرية بين 0.0 و1.0 لكل إجراء على الصفحة، وتترك لمالك الموقع قرار كيفية التعامل مع هذه الدرجة — دون أي تحدٍّ ظاهر على الإطلاق.

ملاحظة: الدرجة ليست حكماً نهائياً، بل مؤشر احتمالي؛ الموقع نفسه هو من يحدّد العتبة التي يقبل عندها الطلب أو يرفضه.

كيفية جمع الإشارات:

<!-- reCAPTCHA v3 integration -->
<script src="https://www.google.com/recaptcha/api.js?render=SITE_KEY"></script>
<script>
  grecaptcha.ready(function() {
    grecaptcha.execute('SITE_KEY', { action: 'login' }).then(function(token) {
      // Token sent to server for verification
      document.getElementById('captcha-token').value = token;
    });
  });
</script>

يُطلق استدعاء execute() جمع الإشارات عند الحاجة، لكن reCAPTCHA تكون قد بدأت فعلياً بجمع البيانات منذ تحميل السكربت.

كيف تُقرأ الدرجة:

الدرجة الدلالة الإجراء المعتاد
0.9 غالباً إنسان السماح
0.7 إنسان على الأرجح السماح مع المراقبة
0.5 غير مؤكد طلب تحقق إضافي
0.3 روبوت على الأرجح الحظر أو عرض reCAPTCHA v2
0.1 روبوت شبه مؤكد الحظر

كيف تكتشفه من مصدر الصفحة:

import requests
import re

def detect_recaptcha_v3(url):
    html = requests.get(url, timeout=10).text
    indicators = {
        "recaptcha_v3": False,
        "site_key": None,
        "actions": [],
    }

    # Check for v3 script
    if "recaptcha/api.js?render=" in html:
        indicators["recaptcha_v3"] = True
        match = re.search(r"render=([A-Za-z0-9_-]+)", html)
        if match:
            indicators["site_key"] = match.group(1)

    # Find action names
    actions = re.findall(r"action:\s*['\"](\w+)['\"]", html)
    indicators["actions"] = actions

    return indicators

print(detect_recaptcha_v3("https://example.com/login"))

2. Cloudflare Turnstile

  • المزود: Cloudflare
  • سنة الإطلاق: 2022
  • الحصة السوقية: الأسرع نمواً

يعتمد Turnstile على خط تحقق متعدد المراحل دون جمع بيانات شخصية من المستخدم، وهو ما يجعله خياراً مفضّلاً للمواقع الحسّاسة للخصوصية.

مراحل التحقق:

  1. التحقق عبر Private Access Token — إذا كان المتصفح يدعم Apple PAT يكتمل التحقق فوراً
  2. تحدٍّ غير تفاعلي — يحلّ المتصفح إثبات عمل تشفيرياً خفيفاً في الخلفية
  3. التحدي المُدار — تختار Cloudflare بين الوضع غير التفاعلي والتفاعلي بحسب إشارات المخاطر عبر شبكتها التي تمرّ عبرها أكثر من 20% من حركة الإنترنت
  4. تحدٍّ تفاعلي — لا يظهر إلا عند ارتفاع درجة المخاطرة، فيُعرض عنصر على هيئة مربع اختيار

طريقة التكامل:

<!-- Turnstile widget -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

كيف تكتشفه:

def detect_turnstile(url):
    html = requests.get(url, timeout=10).text
    indicators = {
        "turnstile": False,
        "site_key": None,
    }

    if "challenges.cloudflare.com/turnstile" in html or "cf-turnstile" in html:
        indicators["turnstile"] = True
        match = re.search(r'data-sitekey="([^"]+)"', html)
        if match:
            indicators["site_key"] = match.group(1)

    return indicators

3. reCAPTCHA v2 غير المرئية

  • المزود: Google
  • سنة الإطلاق: 2017

هي reCAPTCHA v2 نفسها لكن تُشغَّل برمجياً عند إرسال النموذج: لا مربع اختيار ظاهر — ينقر المستخدم زر الإرسال فتعمل reCAPTCHA في الخلفية. وإذا ارتفعت درجة المخاطرة بما يكفي، يظهر تحدي صور منبثق.

طريقة التكامل:

<button class="g-recaptcha"
        data-sitekey="SITE_KEY"
        data-callback="onSubmit"
        data-size="invisible">
    Submit
</button>

أين يختلف عن الإصدار 3؟ يعود الإصدار 2 غير المرئي إلى تحدٍّ ظاهر عند المستخدمين المشبوهين، بينما لا يُظهر الإصدار 3 أي تحدٍّ إطلاقاً ويترك القرار للموقع بناءً على الدرجة وحدها.

4. hCaptcha السلبي (فئة Enterprise)

  • المزود: Intuition Machines
  • التوفر: فئة Enterprise فقط

يقيّم الوضع السلبي في hCaptcha Enterprise الزائر دون أي عنصر واجهة مرئي، معتمداً على الإشارات السلوكية نفسها المستخدمة في hCaptcha القياسي، ولا يعرض تحدياً بصرياً إلا لأكثر الزوار إثارة للشك.

تنبيه: hCaptcha — بوضعيه القياسي والسلبي — ليس ضمن الأنواع التي يحلّها CaptchaAI حالياً، على عكس reCAPTCHA v3 وTurnstile.

5. رموز الوصول الخاصة (Apple Private Access Tokens)

  • المزود: Apple
  • التوفر: iOS 16 فأحدث، وmacOS Ventura فأحدث

هذه ليست خدمة CAPTCHA بل آلية تُغني عنها: تُثبت أجهزة Apple شرعيتها عبر توثيق الأجهزة (attestation)، فتسمح للمواقع بالاستغناء عن اختبار CAPTCHA بالكامل.

Device attestation:

  1. Website requests a challenge from a token issuer
  2. Device proves it is genuine without revealing identity
  3. Token issuer generates a blind-signed token
  4. Website verifies token → CAPTCHA skipped

مدعومة من Cloudflare وFastly وغيرها من مزوّدي CDN.


مقارنة سريعة بين الأنظمة غير المرئية

قبل الانتقال إلى التنفيذ، تلخّص هذه المقارنة الفروق التي تهمّك عند اختيار طريقة التعامل مع كل نظام:

الخاصية reCAPTCHA v3 Turnstile reCAPTCHA v2 غير المرئية hCaptcha السلبي
التحدي الظاهر لا يظهر أبداً نادراً أحياناً (احتياطي) نادراً
الخصوصية يجمع بيانات التصفح لا بيانات شخصية يجمع بيانات التصفح يجمع بيانات التفاعل
التكلفة مجاني (1M/شهر) مجاني (غير محدود) مجاني (1M/شهر) Enterprise فقط
إرجاع درجة نعم (0.0–1.0) لا (نجاح/فشل) لا (نجاح/فشل) نعم (Enterprise)
التحدي الاحتياطي الموقع يقرّر تديره Cloudflare شبكة صور منبثقة شبكة صور منبثقة
دعم CaptchaAI نعم (توكن v3) نعم (طريقة turnstile) نعم (توكن) ❌ غير مدعوم حالياً

توليد رموز الأنظمة غير المرئية عبر CaptchaAI

تُصدر الأنظمة غير المرئية رموزاً (tokens) لا بد من إرسالها مع النموذج، وهنا يأتي دور خدمة تولّد هذه الرموز خارجياً عبر الـ API.

مثال: فريق ضمان جودة في متجر إلكتروني بالرياض أو القاهرة يختبر مسار التسجيل والدفع آلياً، لكن الصفحة محمية بـ reCAPTCHA v3 غير المرئية فتُرفض طلبات الاختبار بصمت لغياب توكن صالح. الحل توليد التوكن عبر CaptchaAI وإرفاقه بالطلب كما يفعل متصفح حقيقي.

نصيحة: يعمل النمط في جميع الأمثلة بخطوتين — إرسال الطلب ثم استطلاع النتيجة دورياً حتى وصول التوكن. اضبط مهلة انتهاء معقولة لتفادي انتظار لا نهائي عند تعذّر الحل.

توليد توكن reCAPTCHA v3

import requests
import time

API_KEY = "YOUR_API_KEY"

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6LdKlZEpAAAAAAOQjzC2v_d36tWxCl6dWsozdSy9",
    "pageurl": "https://example.com/login",
    "version": "v3",
    "action": "login",
    "json": 1,
})

task_id = submit.json()["request"]

for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if result.get("status") == 1:
        token = result["request"]
        print(f"reCAPTCHA v3 token received (score ≥ 0.9)")
        break

توليد توكن Cloudflare Turnstile

يتغيّر الحقل إلى sitekey والطريقة إلى turnstile، ويبقى نمط الإرسال والاستطلاع نفسه:

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x4AAAAAAAC3DHQhMMQ_Rxrg",
    "pageurl": "https://example.com/signup",
    "json": 1,
})

task_id = submit.json()["request"]

for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if result.get("status") == 1:
        turnstile_token = result["request"]
        print(f"Turnstile token received")
        break

reCAPTCHA v3 عبر Node.js

تصلح الدالة التالية للتشغيل غير المتزامن داخل خدمات Node.js:

const axios = require("axios");

async function solveRecaptchaV3(siteKey, pageUrl, action) {
    const API_KEY = "YOUR_API_KEY";

    // Submit
    const { data: submit } = await axios.post(
        "https://ocr.captchaai.com/in.php",
        new URLSearchParams({
            key: API_KEY,
            method: "userrecaptcha",
            googlekey: siteKey,
            pageurl: pageUrl,
            version: "v3",
            action: action,
            json: 1,
        })
    );

    const taskId = submit.request;

    // Poll
    for (let i = 0; i < 60; i++) {
        await new Promise((r) => setTimeout(r, 5000));
        const { data: result } = await axios.get(
            "https://ocr.captchaai.com/res.php",
            {
                params: {
                    key: API_KEY,
                    action: "get",
                    id: taskId,
                    json: 1,
                },
            }
        );

        if (result.status === 1) {
            return result.request;
        }
    }

    throw new Error("Solve timeout");
}

solveRecaptchaV3("SITE_KEY", "https://example.com/login", "login")
    .then((token) => console.log("Token:", token.substring(0, 50) + "..."));

مدقّق شامل يكتشف الأنظمة غير المرئية

يجمع السكربت التالي عمليات الكشف السابقة في دالة واحدة يمكنك دمجها في خط الأتمتة لتحديد نوع الكابتشا قبل طلب التوكن:

import requests
import re

def detect_invisible_captcha(url):
    """Detect all invisible CAPTCHA types on a page."""
    html = requests.get(url, timeout=10).text

    results = []

    # reCAPTCHA v3
    if "recaptcha/api.js?render=" in html:
        key = re.search(r"render=([A-Za-z0-9_-]+)", html)
        results.append({
            "type": "reCAPTCHA v3",
            "site_key": key.group(1) if key else "unknown",
            "solver_method": "userrecaptcha (version=v3)",
        })

    # reCAPTCHA v2 invisible
    if 'data-size="invisible"' in html and "g-recaptcha" in html:
        key = re.search(r'data-sitekey="([^"]+)"', html)
        results.append({
            "type": "reCAPTCHA v2 Invisible",
            "site_key": key.group(1) if key else "unknown",
            "solver_method": "userrecaptcha (invisible=1)",
        })

    # Cloudflare Turnstile
    if "challenges.cloudflare.com/turnstile" in html:
        key = re.search(r'data-sitekey="([^"]+)"', html)
        results.append({
            "type": "Cloudflare Turnstile",
            "site_key": key.group(1) if key else "unknown",
            "solver_method": "turnstile",
        })

    # hCaptcha (passive mode detected by script without visible widget)
    if "hcaptcha.com/1/api.js" in html and 'data-size="invisible"' in html:
        results.append({
            "type": "hCaptcha Passive",
            "solver_method": "hcaptcha",
        })

    if not results:
        results.append({"type": "none detected"})

    return results

for item in detect_invisible_captcha("https://example.com"):
    print(item)

الأسئلة الشائعة

ما الفرق العملي بين reCAPTCHA v3 وCloudflare Turnstile عند الأتمتة؟

الفرق الجوهري في شكل المخرجات وطريقة التعامل معها:

  • reCAPTCHA v3: تُرجع درجة (0.0–1.0) يفسّرها موقعك ويضبط لها عتبة على الخادم.
  • Turnstile: يُرجع نتيجة نجاح/فشل مع توكن جاهز يكفي التحقق منه.

وكلاهما غير مرئي في الغالب، ويمكن توليد رمز كلٍّ منهما عبر CaptchaAI.

هل تؤثر جودة البروكسي وسمعة عنوان IP على الأنظمة غير المرئية؟

نعم، وبشكل كبير. تدخل سمعة عنوان IP وبصمة TLS ضمن الإشارات التي يقيّمها محرّك المخاطر. فعنوان مركز بيانات معروف أو بروكسي منخفض الجودة يرفع درجة المخاطرة ويزيد احتمال ظهور تحدٍّ أو الحظر الصامت، بينما يخفض الوكيل السكني النظيف هذه الدرجة.

كيف أختار عتبة درجة reCAPTCHA v3 دون حظر مستخدمين حقيقيين؟

ابدأ بعتبة معتدلة ثم شدّدها تدريجياً بحسب سجلاتك:

  • 0.5 تقريباً: نقطة انطلاق متوازنة مع مراقبة توزيع الدرجات.
  • 0.7 فأعلى: أكثر صرامة، لكنها قد تحجب مستخدمين شرعيين على شبكات ضعيفة السمعة.

لذا يدمج كثيرون reCAPTCHA v3 مع reCAPTCHA v2 كتحدٍّ احتياطي.

هل يستطيع CaptchaAI توليد رموز للأنظمة غير المرئية مثل reCAPTCHA v3 وTurnstile؟

نعم، يدعم الأنواع غير المرئية الأكثر شيوعاً:

  • reCAPTCHA v3 — طريقة userrecaptcha مع version=v3.
  • Cloudflare Turnstile — طريقة turnstile.
  • reCAPTCHA v2 غير المرئية — طريقة userrecaptcha.

تُرسل الطلب ثم تستطلع النتيجة حتى يصل التوكن فتُرفقه بالنموذج. أما hCaptcha فغير مدعوم حالياً.


الخلاصة

تقيّم الأنظمة غير المرئية الزائر في الخلفية عبر تحليل سلوك المتصفح وبصمة الجهاز وسمعة الشبكة، دون أي تفاعل ظاهر. ويتصدّر المشهد اليوم reCAPTCHA v3 وCloudflare Turnstile، مع نموّ أسرع لصالح Turnstile بفضل تسعيره المجاني وتصميمه الذي يراعي الخصوصية. ومهما كان النظام غير مرئي، تبقى الأتمتة بحاجة إلى توكن صالح لكل طلب. استخدم CaptchaAI لتوليد هذه الرموز: reCAPTCHA v3 عبر طريقة userrecaptcha مع version=v3، وCloudflare Turnstile عبر طريقة turnstile.

مقالات ذات صلة

أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.