انتقل من hCaptcha
يستخدم Caputchin النموذج ذا الجزأين نفسه كـ hCaptcha، أداة على الصفحة تنتج رمزًا، وفحص على الخادم يؤكّده، فالانتقال أساسًا استبدال آليّ، لا إعادة كتابة. تبادل الخادم خصوصًا يعكس شكل siteverify الذي يتبعه hCaptcha نفسه. يعطي هذا الدليل القبل-والبعد لكل قطعة.
إن لم تكن قد أنشأت حساب Caputchin ومفتاح موقع بعد، فـأنشئ حسابك أولًا؛ ستحتاج مفتاحًا عامًّا (cpt_pub_...) للصفحة وسرًّا (cpt_sec_...) لخادمك الخلفي، التقسيم نفسه كمفتاح موقع hCaptcha ومفتاحه السرّي.
النموذج الذهني دون تغيير
كل ما بنيته أصلًا حول hCaptcha، اعرض أداة، واجمع رمزًا، وأرسِله POST إلى خادمك، وتحقّق منه قبل أن تثق بالطلب، يبقى. الأسماء ونقاط الوصول وحدها تتغيّر.
1. استبدل مقتطف العميل
| hCaptcha | Caputchin | |
|---|---|---|
| السكربت | <script src="https://js.hcaptcha.com/1/api.js" async defer> | <script src="https://cdn.jsdelivr.net/npm/@caputchin/widget@3/dist/widget.js"> |
| العنصر | <div class="h-captcha" data-sitekey="..."> | <caputchin-widget sitekey="cpt_pub_..."> |
| حقل الرمز في نموذج | h-captcha-response (محقون تلقائيًّا) | caputchin-token (محقون تلقائيًّا) |
| قراءة الرمز في JS | hcaptcha.getResponse() | حدث pass detail.token |
كـ hCaptcha، تحقن أداة Caputchin حقل رمز مخفيًّا تلقائيًّا في النموذج الذي تجلس فيه، فإن كان نموذجك يرسل POST عاديًّا أصلًا، فلا تغيّر سوى العنصر واسم الحقل الذي يقرؤه خادمك الخلفي. انظر أضف الأداة لإعداد العميل الكامل وخيار CDN مقابل npm.
2. استبدل تحقّق الخادم
هنا الأقرب بينهما، شكلا الطلب والاستجابة يصطفّان حقلًا بحقل تقريبًا.
| hCaptcha | Caputchin | |
|---|---|---|
| نقطة الوصول | POST https://api.hcaptcha.com/siteverify | POST https://caputchin.com/api/v1/siteverify |
| حقول الطلب | secret، وresponse | secret، وresponse (متطابق) |
| الاستجابة | { success, challenge_ts, hostname, "error-codes", score? } | { success, challenge_ts, hostname, error-codes, score? } |
| قاعدة الثقة | تصرّف فقط إن success === true | تصرّف فقط إن success === true (متطابق) |
ملاحظة هيئة واحدة: نقطة وصول تحقّق hCaptcha تتوقّع application/x-www-form-urlencoded، بينما يقبل Caputchin بـ JSON. إن كان كودك القائم يرسل حقولًا مرمَّزة-نموذجيًّا، فبدّل الجسم إلى JSON ({"secret":"...","response":"..."}) بـ Content-Type: application/json. الحقول نفسها دون تغيير. مرجع الطلب/الاستجابة الكامل على تحقّق من رمز على خادمك الخلفي؛ ومقتطفات أطر العمل في أمثلة الخادم الخلفي.
3. أسقط النتيجة، إن استخدمت hCaptcha Enterprise
يعيد hCaptcha Enterprise نتيجة مخاطرة score (حيث رقم أعلى يعني مخاطرة أكثر) ويطلب منك اختيار عتبة. Caputchin لا يعمل هكذا: success نجاح/فشل موثوق، لأن التحقّق اجتيز فعلًا (فحص proof-of-work، أو جولة لعبة معاد اشتقاقها على الخادم)، لا تقدير مخاطرة.
إن كان كودك if (data.score < 0.7)، فاستبدله بـ if (data.success). حقل score في Caputchin غير ذي صلة: موجود فقط لجولات الألعاب وهو نتيجة اللعبة (للعلم، للوحات نتائجك الخاصة)، لا مخاطرة ولا احتمال-روبوت أبدًا، فلا تحكّم الوصول به. (لاحظ أن الاتّجاه أيضًا عكسيّ، نتيجة hCaptcha ترتفع مع المخاطرة؛ ونتيجة Caputchin ترتفع مع أداء اللعبة.)
ما الذي يحمل، وما الذي يتحسّن
- موقف الخصوصية الذي اخترت hCaptcha لأجله، محفوظًا. Caputchin لا يجمع IP، ولا User-Agent، ولا بصمة، ولا قياسًا سلوكيًّا؛ فالبروتوكول لا مكان فيه لمعرّف زائر، فلا شيء ليُسرَّب أو يُباع. انظر الفلسفة.
- لعبة اختيارية. بدل تحدّي اختيار صور، تستطيع تحويل التحقّق إلى لعبة قصيرة يلعبها زوّارك فعلًا، وهي الجزء الذي يصمد أمام حلّالات الذكاء الاصطناعي. انظر أضف لعبة.
- CSP صارم يبقى صارمًا. يعمل Caputchin تحت Content-Security-Policy ضيّقة؛ تسمح ببضعة أصول بدل تخفيف سياستك. انظر كيف يعزل Caputchin الألعاب.
مزالق
- مفتاحان، بيتان. المفتاح العام (
cpt_pub_...) يذهب على الصفحة؛ والسرّ (cpt_sec_...) يبقى على الخادم فقط، انضباط hCaptcha نفسه بالضبط. لا تشحن السرّ إلى المتصفّح. - الرمز للاستخدام مرة واحدة. كـ hCaptcha، يتحقّق الرمز مرة. لا تخبّئه ولا تعد تشغيله.
- غيّر اسم الحقل الذي يقرؤه خادمك الخلفي. الحقل المخفي
caputchin-token، لاh-captcha-response، فوات شائع بسطر واحد. - هيئة الجسم. أرسِل طلب التحقّق كـ JSON، لا مرمَّزًا-نموذجيًّا.
انظر أيضًا
- أضف الأداة: إعداد العميل الكامل.
- تحقّق من رمز على خادمك الخلفي: مرجع
siteverifyالموثوق. - أمثلة الخادم الخلفي: نداء التحقّق بكل لغة.
- أضف لعبة: حوّل التحقّق إلى لعبة.