کپچا چگونه کار میکند
CAPTCHA کوتاهشدهٔ عبارتی انگلیسی به معنای «آزمون تورینگ عمومی و کاملاً خودکار برای تشخیص رایانه از انسان» است. پژوهشگران دانشگاه کارنگی ملون این نام را در سال 2003 ساختند و ایده از آن زمان تغییری نکرده است: چیزی بپرس که برای انسان آسان و برای برنامه دشوار است، و درخواست را فقط وقتی بپذیر که پاسخ درست باشد.
هر کپچایی، از یک کلمهٔ کجومعوج تا یک بررسی نامرئی، در سه گام کار میکند. ابزارک در مرورگر بازدیدکننده اجرا میشود و یک توکن میسازد؛ گواهی بر اینکه آزمون پشت سر گذاشته شده است. مرورگر این توکن را همراه فرم میفرستد. سپس سرور شما، پیش از ساختن حساب یا ارسال پیام، از ارائهدهندهٔ کپچا میپرسد که آیا توکن واقعی است.
گامی که جا میافتد همیشه سومی است، و بدون آن ابزارک فقط تزئین است: ربات فرم را بدون توکن یا با یک توکن قدیمی میفرستد و رد میشود. توکنها دقیقاً به همین دلیل کوتاهعمر و یکبارمصرفاند و بررسی باید در سرور و در هر ارسال انجام شود.
بررسی در سمت سرور: گامی که به ابزارک معنا میدهد
curl -s https://www.google.com/recaptcha/api/siteverify \
-d secret="$RECAPTCHA_SECRET" \
-d response="$TOKEN_FROM_THE_FORM"
# {"success": true, "hostname": "example.com", ...}
# hCaptcha and Turnstile work the same way, each with its own siteverify URL.
انواع: از حروف کجومعوج تا بررسی بدون معما
کپچای متنی حروف و اعداد تحریفشده نشان میدهد. نسل اول همین بود و امروز ضعیفترین است: نرمافزارهای تشخیص نویسه آن را بهتر از بسیاری از انسانها میخوانند.
کپچای تصویری از شما میخواهد همهٔ خانههایی را که چراغ راهنمایی یا دوچرخه دارند انتخاب کنید. کپچای صوتی اعدادی را روی نویز پسزمینه میخواند و بیشتر بهعنوان جایگزین دسترسپذیر دو نوع قبلی وجود دارد.
reCAPTCHA v2، یعنی کادر گوگل، در سال 2014 مدل را عوض کرد. تیک «من ربات نیستم» بیشتر لحظهای است برای اینکه اسکریپت مرورگر و رفتار آن را ببیند؛ جدول تصاویر را فقط بازدیدکنندهای میبیند که اسکریپت دربارهٔ او مطمئن نیست. نسخهٔ نامرئی آن خود کادر را هم حذف میکند و جدول را فقط در صورت نیاز نشان میدهد.
reCAPTCHA v3 (2018) هیچ چیزی نشان نمیدهد. برای هر اقدام یک امتیاز بین 0.0 و 1.0 برمیگرداند و سرور شما تصمیم میگیرد امتیاز پایین چه معنایی دارد: رد کردن، درخواست عامل دوم یا فرستادن ارسال برای بازبینی.
hCaptcha از مدل v2 پیروی میکند، با بررسیهای پسزمینه و یک کار تصویری هنگام تردید، و خود را گزینهای متمرکز بر حریم خصوصی معرفی میکند؛ نسخهٔ سازمانی آن امتیاز ریسک هم میدهد.
Cloudflare Turnstile (2022) بهجای معما مجموعهای چرخشی از بررسیهای غیرتعاملی را در مرورگر اجرا میکند و برای هر سایتی رایگان است، نه فقط سایتهای پشت Cloudflare. ابزارک آن سه حالت دارد: مدیریتشده (کادر انتخاب فقط وقتی بررسیها مطمئن نیستند)، غیرتعاملی و نامرئی.
جهت حرکت از همین فهرست پیداست: هر نسل از بازدیدکننده کمتر و از مرورگر بیشتر میپرسد.
کپچا برای شما چه هزینهای دارد
زمان، و تبدیلهایی که پشت آن است. یک مطالعهٔ گستردهٔ دانشگاه استنفورد در سال 2010 زمان حل کپچای تصویری را حدود 10 ثانیه و کپچای صوتی را نزدیک به 30 ثانیه اندازه گرفت و بسیاری از پاسخهای صوتی هم نادرست بودند. هر یک از این ثانیهها میان بازدیدکننده و کاری که برایش آمده فاصله میاندازد: ثبتنام، پرداخت، پرسیدن سؤال از شما.
دسترسپذیری. معمای تصویری افراد نابینا و کمبینا را بیرون نگه میدارد و جایگزین صوتی برای همه دشوار و برای کسی که هم بینایی و هم شنوایی ضعیفی دارد بیفایده است. W3C یادداشتی منتشر کرده که تماماً به دسترسناپذیری کپچا اختصاص دارد و WCAG الزام میکند کپچا جایگزینی برای حس دیگری داشته باشد.
حریم خصوصی و وزن صفحه. ابزارک اسکریپتی از ارائهدهنده است که در صفحهٔ شما بارگذاری میشود و مرورگر بازدیدکننده را میبیند؛ جای این موضوع در سیاست حریم خصوصی شماست. این ابزارک همچنین حجم قابلتوجهی JavaScript شخص ثالث است؛ پس آن را فقط در صفحهای که فرم دارد بارگذاری کنید، نه در کل سایت.
اشتباه دربارهٔ آدمها. سامانههای مبتنی بر ریسک یاد میگیرند ترافیک معمولی چه شکلی است و کاربر VPN، مرورگرهای متمرکز بر حریم خصوصی یا اتصال یک دفتر شلوغ کمتر معمولی به نظر میرسند. این افراد بیآنکه خطایی کرده باشند معمای بیشتر یا امتیاز پایینتری میگیرند.
چرا معماها دیگر کافی نیستند
کپچا فقط تا وقتی کار میکند که حل آن برای انسان ارزانتر از ماشین باشد. مدتی است که این دیگر درست نیست.
ماشینها بهتر شدند. کپچاهای متنی اول در برابر تشخیص نویسه شکست خوردند و جدولهای تصویری بعدتر در برابر مدلهای بینایی امروزی. پژوهشی که در سال 2023 در USENIX Security ارائه شد نشان داد رباتها چند نوع رایج کپچا را سریعتر از انسانها و متن تحریفشده را دقیقتر حل میکنند.
انسانها ارزانتر شدند. جایی که نرمافزار کم میآورد، سرویسهای حل کپچا معما را به کارگران انسانی میسپارند و پاسخ را از طریق API برمیگردانند؛ هر هزار حل چند دلار. برای ارسالکنندهٔ اسپم این رقم ناچیز است؛ برای بازدیدکنندگان واقعی شما معما همان مزاحمت دهثانیهای همیشگی است.
پس امروز کپچا بیشتر خودکارسازی ارزان را فیلتر میکند: اسکریپتهایی که حتی زحمت شبیه مرورگر شدن را به خود ندادهاند. این کار جلوی در یک فرم هنوز ارزش دارد. اما دفاعی برای بقیهٔ سایت نیست و ارزش سامانههای امروزی در سیگنالهایی است که جمع میکنند، نه در معمایی که گاهبهگاه نشان میدهند.
جایگزینهای نامرئی
اینها بررسیهایی هستند که جای معما را میگیرند. هیچکدام از بازدیدکننده چیزی نمیپرسند و در کنار هم قویتریناند.
JS challenge (بررسی JavaScript). سرور به نخستین درخواست مشکوک با صفحهای کوچک پاسخ میدهد که اسکریپتی را در مرورگر اجرا میکند. مرورگر واقعی آن را در حدود یک ثانیه تمام میکند و یک کوکی امضاشده میگیرد؛ اسکریپتی که فقط HTML دانلود میکند از آن رد نمیشود. بازدیدکننده یک صفحهٔ کوتاه «در حال بررسی اتصال شما» میبیند یا اصلاً چیزی نمیبیند.
اثبات کار (proof of work). گونهای که در آن مرورگر یک مسئلهٔ محاسباتی کوچک را حل میکند. انسان متوجه آن نمیشود، اما هر درخواست برای ربات زمان پردازنده هزینه دارد و این در مقیاس بالا جمع میشود.
محدودیت نرخ. درخواستهای هر کلاینت را در طول زمان میشمارد. انسان یک صفحه را میخواند و در هر دقیقه روی چند پیوند کلیک میکند؛ یک اسکرپر صدها درخواست میفرستد. شمارش رفتاری را نشان میدهد که هیچ درخواست تکی لو نمیدهد.
امتیاز ربات و سیگنالهای ریسک. درخواست از کجا آمده (اتصال خانگی یا شبکهٔ دیتاسنتر)، آیا هدرهایش با مرورگری که ادعا میکند جور درمیآید، و در طول درخواستها چگونه رفتار میکند. برخی سامانهها اینها را در یک امتیاز خلاصه میکنند و برخی بر اساس سیگنالهای مشخص عمل میکنند. در هر دو حالت تصمیم پیش از تحویل صفحه گرفته میشود.
فیلدهای تله (honeypot). فیلدی در فرم که با CSS از چشم انسان پنهان شده است. انسانها آن را خالی میگذارند؛ رباتهای ساده همهٔ فیلدها را پر میکنند و خودشان را لو میدهند. رایگان، نامرئی و مؤثر در برابر اسپم ارزان.
خزندههای تأییدشده. موتورهای جستوجو باید بدون مانع از همهٔ اینها عبور کنند. آنها را از روی شبکهای که از آن میآیند میشناسند، نه از روی رشتهٔ user agent که هر کسی میتواند بنویسد.
کپچا هنوز کجا لازم است
روی فرمی که یک ارسال موفق برای مهاجم ارزش دارد: ساخت حساب، بازنشانی رمز عبور، فرمهای تماس و نظر، فیلدهای کارت هدیه و کد تخفیف. آنجا یک گام اضافه برای انسان بهای منصفانهای است و توکنی که در سرور بررسی میشود دقیقاً همان کنترل درست است.
ما هم خودمان همینطور از آن استفاده میکنیم. فرمهای ثبتنام و تماس cdn.com.tr یک کپچای کادری دارند و در صفحهٔ قیمتها اسکریپت کپچا فقط وقتی بارگذاری میشود که فرم تماس سازمانی باز شود؛ بنابراین کسی که فقط قیمتها را میبیند آن را دانلود نمیکند.
جایی که لازم نیست: بازدید عادی صفحهها، فهرست محصولات، مقالهها، APIها و اپلیکیشنهای موبایل. معما جلوی بازدید از هر بازدیدکننده عوارض میگیرد تا ترافیکی را متوقف کند که یک بررسی نامرئی در edge بهتر متوقف میکند.
CDN.com.tr چگونه بدون معما از سایت محافظت میکند
محافظت در برابر رباتها در cdn.com.tr یک بررسی JavaScript است که در edge و جلوتر از سرور مبدأ شما اجرا میشود. در پنل، کارت محافظت در برابر رباتها (JS Challenge) در بخش Protection است و سه حالت دارد: خاموش، بازدیدکنندگان پرخطر (پیشنهادی) و همه. تغییر حالت خودبهخود به edge میرسد و نیازی به استقرار جداگانه نیست.
در حالت بازدیدکنندگان پرخطر فقط درخواستهایی بررسی میشوند که سیگنال ریسک دارند: ترافیک شبکههای دیتاسنتر و ابری که خوانندهٔ واقعی بهندرت از آنها میآید؛ کلاینتی که خود را موتور جستوجو معرفی میکند اما از شبکهای میآید که آن موتور از آن استفاده نمیکند؛ user agent خالی یا تقریباً خالی؛ و موجی ناگهانی از بازدید صفحه از یک نشانی. خوانندهای که با اتصال خانگی یا موبایل میآید چیزی نمیبیند.
فقط پیمایش صفحهها بررسی میشود. تصاویر، فایلهای استایل، اسکریپتها، فراخوانیهای API و ارسال فرمها بیدخالت عبور میکنند؛ بنابراین نرخ اصابت کش و اپلیکیشنهای شما تحت تأثیر قرار نمیگیرند. خزندههای تأییدشدهٔ موتورهای جستوجو (Google، Bing، Yandex، Apple و DuckDuckGo) همیشه عبور میکنند و بر اساس شبکهای که واقعاً از آن میآیند، نه نامی که میفرستند، بررسی میشوند؛ پس این بررسی هرگز به ایندکس شدن شما آسیب نمیزند.
بازدیدکنندهای که بررسی میشود حدود یک ثانیه یک صفحهٔ کوتاه «در حال بررسی اتصال شما» را به زبان خودش میبیند (هفت زبان آماده است و بقیه انگلیسی میبینند) و سپس صفحهای که خواسته بود باز میشود. صفحهٔ بررسی با کد 503 و noindex فرستاده میشود، پس هرگز به نتایج جستوجو راه نمییابد. از بازدیدکنندهای که بررسی را گذرانده تا 30 دقیقه دوباره پرسیده نمیشود و کوکی مجوز به نشانی و مرورگر او گره خورده است، پس نمیتوان آن را روی دستگاه دیگری کپی کرد.
حالت همه، نخستین بازدید صفحهٔ هر بازدیدکنندهٔ تازه را از بررسی میگذراند. این اهرمی برای میانهٔ یک حمله است، نه تنظیمی برای روزهای عادی، و پنل پیش از روشن کردن آن تأیید میخواهد.
چه چیزی را متوقف کرد و چه چیزی پشت آن است
این سقف هر بررسی JavaScript است: رباتی که یک مرورگر واقعی را میراند میتواند اسکریپت را اجرا کند. به همین دلیل این بررسی یکی از چند لایه روی همان edge است. محدودیت نرخ که برای کل حساب یا برای هر قانون تحویل تنظیم و بر اساس نشانی هر کلاینت شمرده میشود، به هر چیزی که از سهمیهاش بگذرد با کد 429 پاسخ میدهد؛ همین است که ناوگان مرورگرهای headless را پرهزینه میکند. WAF محتوای درخواستها را بررسی میکند و قوانین کشور و ASN شبکهای را که هرگز نمیخواهید از آن چیزی بشنوید با کد 403 میبندند.
کارت بررسی آمار خودش را نگه میدارد: بررسیهای نمایشدادهشده، بررسیهای موفق، خزندههای تأییدشدهای که عبور داده شدند، دلیل بررسی بازدیدکنندگان و شبکههایی که بیشترین بررسی را داشتند؛ برای ساعت، روز، هفته یا ماه گذشته. نرخ عبور نزدیک به صفر همان نتیجهای است که میخواهید: یعنی آنچه متوقف شد انسان نبود.
کدام ابزار برای کدام وضعیت
صفحهها توسط کلاینتهایی شبیه مرورگر اسکرپ یا غرق میشوند: محافظت در برابر رباتها در حالت بازدیدکنندگان پرخطر.
حمله در جریان است: حالت همه تا پایان حمله، سپس بازگشت به بازدیدکنندگان پرخطر.
حدس زدن رمز عبور در صفحهٔ ورود: محدودیت نرخ سختگیرانه روی همان مسیر و کپچا روی فرم.
ثبتنامها و پیامهای تماس اسپم: کپچا یا Turnstile روی فرم با بررسی در سرور، بهعلاوهٔ یک فیلد تله.
ترافیک از شبکهای که هرگز به آن خدمت نمیدهید: قانون ASN یا کشور.
محتوای مخرب مانند تزریق SQL: WAF. بررسی JavaScript میسنجد چه کسی میپرسد، نه اینکه چه میفرستد. برای حملههای حجمی، محافظت DDoS را ببینید.
پرسشهای پرتکرار
CAPTCHA مخفف چیست؟
Completely Automated Public Turing test to tell Computers and Humans Apart؛ یعنی آزمون تورینگ عمومی و کاملاً خودکار برای تشخیص رایانه از انسان. این اصطلاح در سال 2003 در دانشگاه کارنگی ملون پدید آمد. «آزمون تورینگ» اشاره به آزمون آلن تورینگ است که میسنجد آیا ماشین میتواند خود را انسان جا بزند، اما وارونه: اینجا داور ماشین است.
اگر reCAPTCHA v3 چیزی نشان ندهد، باز هم کپچاست؟
همان سرویس است با قراردادی دیگر. v3 هرگز معما نشان نمیدهد؛ برای هر اقدام امتیازی از 0.0 (احتمالاً ربات) تا 1.0 (احتمالاً انسان) برمیگرداند و سرور شما تصمیم میگیرد با آن چه کند. این آن را بیشتر به امتیاز ربات تبدیل میکند تا آزمون، و کار اصلی، یعنی انتخاب آستانهها و اینکه زیر آنها چه رخ دهد، با شماست.
آیا رباتها میتوانند کپچا را حل کنند؟
بله. مدلهای تشخیص تصویر معماهای متنی و تصویری را حل میکنند و سرویسهای حل، باقی را هزاری چند دلار به کارگران انسانی میسپارند. کپچا هنوز خودکارسازی ارزان را که بیشتر اسپم از آن است فیلتر میکند، اما نباید تنها دفاع شما باشد.
آیا Cloudflare Turnstile فقط برای سایتهای روی Cloudflare است؟
نه. Turnstile از یک ابزارک و یک فراخوانی بررسی در سمت سرور تشکیل شده و روی هر سایتی کار میکند، از جمله سایتهایی که از طریق CDN دیگری ارائه میشوند. مثل هر کپچای دیگری، فقط وقتی محافظت میکند که سرور شما توکن را در هر ارسال بررسی کند.
آیا کپچا یا بررسی ربات به سئو آسیب میزند؟
کپچا روی فرم نه، چون خزندهها فرم ارسال نمیکنند. اما بررسیای که جلوی صفحهها باشد اگر خزندهها را متوقف کند آسیب میزند. به همین دلیل بررسی cdn.com.tr خزندههای تأییدشدهٔ Google، Bing، Yandex، Apple و DuckDuckGo را عبور میدهد و صفحهٔ بررسی را با کد 503 و noindex میفرستد تا هرگز ایندکس نشود.
اگر محافظت در برابر رباتها را روشن کنم، باز هم کپچا لازم دارم؟
روی فرمهایی که مهاجمان میخواهند ارسال کنند، بله. این بررسی تعیین میکند چه کسی صفحههای شما را بارگذاری کند؛ به ارسال فرمها نگاه نمیکند. فرمهای ثبتنام، ورود و تماس کپچای خود را نگه میدارند و محدودیت نرخ روی همان مسیرها سرعت تلاشها را محدود میکند.
بازدیدکنندهای که بررسی میشود چه میبیند؟
یک صفحهٔ کوتاه «در حال بررسی اتصال شما» به زبان خودش، حدود یک ثانیه، و بعد صفحهای که خواسته بود خودبهخود باز میشود. JavaScript باید در مرورگرش فعال باشد. پس از عبور، تا 30 دقیقه دوباره از او پرسیده نمیشود.