ایجاد: ۱۷:۰۴ ۱۳۹۱/۸/۸
ویرایش: ۱۶:۵۹ ۱۳۹۴/۲/۲۸

یادداشت‌ها

»

تولید کپچای ضد گلوله!

کپچا چیست؟

captcha (بخوانید: کپچا) مخفف Completely Automated Public Turing test to tell Computers and Humans Apart دانسته می‌شود؛ «آزمون همگانی کاملا خودکارشده‌ی تورینگ برای مجزا کردن انسان و رایانه»!
به عبارت ساده‌تر؛ ربات‌ها و برنامه‌های اتوماتیک، می‌توانند همانند انسان فرم‌های وب را پر کنند، صفحات را به تعداد زیاد درخواست کنند، صفحاتی را درخواست کنند که موجب ارسال ایمیل می‌شود، پسوردهای مختلف را در یک فرم ورود با سرعت بالا تست کنند و ... که این امور معمولا موجب اختلال در کار سایت یا از بین رفتن امنیت آن می‌گردد.
کپچا چالش و آزمونی (غالبا تصویری) است که هدفش تشخیص انسان از ربات است. هرچند آزمون‌های مختلفی برای این کار پیشنهاد شده اما تشخیص متن درون تصویر از جمله متداول‌ترین آنهاست که بیشتر با هدف تایپ متون قدیمی اسکن‌شده توسط سایت captcha انجام شد. این سایت کلمات کتاب‌های اسکن شده را برش می‌زند و در هر کپچا به شما دو کلمه می‌دهد که یکی از آنها را می‌داند اما دومی را نمی‌داند و اگر شما اولی (منظور آن کلمه‌ای است که می‌داند) را صحیح بزنید، دومی هم پذیرفته می‌شود و نهایتا پس از تست کلمه مجهول در چند کپچای دیگر، از صحت کلمه تشخیص داده شده توسط کاربران مطمئن شده و به این ترتیب یک کلمه دیگر از کتب قدیمی تایپ می‌شود!
(البته اخیرا بقدری کلماتش سخت و بد شده که بسیاری از مدیران سایت‌ها ترجیح می‌دهند که از این سرویس استفاده نکنند و از یک کپچای شکیل‌تر و مینیاتوری‌تر! استفاده نمایند.)
لازم به ذکر است که این سرویس چند سال پیش توسط شرکت گوگل خریداری شد.

تصویر کپچا چگونه تولید می‌شود؟ چرا خواندن آن اینقدر سخت است؟!

خب تبدیل متن به عکس، کار ساده‌ای است. مثلا در زبان php با استفاده از توابعی همچون imagefttext به راحتی می‌توان روی عکس، هر رشته تصادفی دلخواهی را درج کرد اما مساله‌ای مهمی که باید توجه شود این است که برخی ربات‌ها مجهز به OCR هستند و می‌توانند متنی که به صورت ساده و واضح به عکس تبدیل شده را به راحتی بخوانند و دوباره به متن تبدیل کنند. (سه نمونه کپچای ساده‌ی شکسته شده که توسط CMS های معروف استفاده می‌شده است)
لذا برنامه‌نویسان سعی کردند با ایجاد نویز و اعوجاج و خطوط و اشکال و سایه‌های اضافی و ... تشخیص متن درون تصویر را برای ربات‌ها غیرممکن نمایند و تصاویری مانند این کپچاها ایجاد کنند.
تکنیک اعوجاج و ایجاد موج در تصویر ایجاد شده، ایده موفقی بود که هم‌اکنون نیز در کپچاهای سایت‌های بزرگی چون گوگل، یاهو و مایکروسافت در حال استفاده است و در عین سادگی، تشخیصش حتی توسط انسان هم دقت بالایی نیاز دارد!
سایت روسی captcha.ru یک نمونه کد PHP برای این کار قرار داده که می‌تواند شما را در نحوه ایجاد اینگونه تموج‌ها راهنمایی کند. کلیت کار هم ایجاد تصویر کپچا و سپس ایجاد مجدد آن با استفاده از دو تابع PHP است. تابع image color at رنگ یک نقطه را می‌خواند و تابع image set pixel هم برای بازنگاری رنگ نقطه خوانده شده در تصویر دوم، با جایگذاری آن در یک فرمول سینوسی است که باعث میشود تصویر کمی بالا و پایین شود و برخی نقاطش فربه و برخی نقاطش نازک شود طوری که انگار ذره‌بین بر روی برخی قسمت‌ها گرفته شده است!

چه روش‌هایی برای ساخت کپچای قوی‌تر هست؟

علاوه بر بحث ایجاد نویز و اعوجاج که اشاره شد، روش‌های زیر برای داشتن کپچای ساده‌تر برای انسان اما سخت‌تر برای ربات، توصیه می‌شود:
  • استفاده از یک فونت اختصاصی (حتی ترجیحا فونتی که خودتان آن را طراحی کنید به صورتی نامرتب و شلخته!)
  • متن را صاف و ساده ننویسید!
    هر کاراکتر را به اندازه عددی تصادفی بالا و پایین کنید و مقداری رندوم بچرخانید. از رنگ‌های مختلف استفاده کنید. کاراکترهای کمرنگ در زمینه تصویر ایجاد کنید و ...
  • در GD متوقف نشوید!
    کتابخانه پیش‌فرض تصویری php ، با نام GD امکانات خاص و محدودی دارد. در صورتی که مایل به افکت‌های بیشتری بودید، می‌توانید از کتاب‌خانه‌ها و کلاس‌های دیگری که با php نوشته شده، استفاده نمایید. مثلا علاوه بر جی دی، Imagick و Gmagick نیز برای کار با تصاویر معروف هستند.
  • از کپچای فارسی استفاده کنید!
    بله این یکی قطعا بهترین راه حل است چون هنوز کسی پیدا نشده که بتواند OCR فارسی کاملی ارائه کند :)
    زبان فارسی هم که هر حرفش چندین حالت (مجزا، اتصال از جلو، اتصال از عقب، اتصال از دو طرف) دارد و تشخیص نقطه‌ها و دندانه‌های حروفش فقط کار آدمیزاد است! خب پس دیگر منتظر چه هستید؟!
    اگر خودتان برنامه‌نویس نیستید، می‌توانید از سرویس کپچای فارسی رایگان «کپچافا» یا سیستم غیررایگان گروه سلام استفاده کنید.
    اگر هم خودتان برنامه نویس هستید که بنده لیستی در حدود 11 هزار کلمه 4-5 حرفی فارسی تهیه کرده‌ام. فقط حواستان باشد که برای نوشتن متن فارسی روی تصویر باید از تبدیل خاصی مثل این استفاده نمایید. توضیحات بیشتری در این مورد در اینجا داده‌ام.

رنگ کپچا

برخی برای سخت‌تر شدن کپچا، آن را با رنگ‌های مختلف رندوم تولید می‌کنند. گاهی کپچا تک رنگ است اما رنگ هر کپچا تصادفی است و گاهی هر حرف و کاراکتر آن رنگی تصادفی دارد و گاهی هم بخش‌های مختلف یک کارکتر! از رنگ‌های متعددی تشکیل شده است.
اما بسیاری از CMSها و شرکت گوگل و شرکت‌های معتبر دیگر، عادت دارند که کپچای خود را با سه رنگ‌هایی شبیه 1B4EB5, D62407 و 16A323 تولید می‌کنند که بنظر می‌رسد این امر برای مراعات حال حدود 10 درصد انسان‌هاست که دچار یکی از انواع عارضه کوررنگی هستند.

خبر جدید: کپچا بازنشسته شد!

همانطور که گوگل دیروز اعلام کرده، این شرکت راهکار جدیدی را برای مقابله با ربات‌ها جایگزین reCaptcha کرده است. (ترجمه چکیده این خبر به فارسی)

Google no captcha reCaptcha

راه حل ارائه شده از جانب گوگل که اسم آن No CAPTCHA می‌باشد، رفتارهای کاربر را از طریق موتوری با عنوان risk analysis engine مورد بررسی قرار می‌دهد و اطمینان حاصل می‌کند که شما یک انسان هستید و قصد ارسال اسپم یا مختل کردن سرویس را ندارید.

در این فناوری، مواردی مانند شناسه اینترنتی (IP)، نحوه‌ی حرکت داده‌شدن نشانگر ماوس، مدت‌زمان حضور در یک صفحه وب توسط کاربر را کنترل نموده و سپس با تجزیه و تحلیل آنها اجازه‌ی استفاده و یا عدم‌استفاده از خدمات مورد درخواست را صادر می نماید. در صورتی که تجزیه و تحلیل‌های صورت گرفته به هر دلیلی شما را انسان تشخیص ندهند، مجدداً شیوه‌ی سنتی کپچا جایگزین خواهد شد و لازم است کلمات و اعدادی که در یک تصویر نمایش داده می‌شود را وارد نمایید. این شیوه ی جدید که احتمالاً برای کاربران بسیار جذاب و دل‌نشین خواهد بود، سبب می‌گردد راه‌حل قدیمی ارائه شده‌ی reCAPTCHA که ضعف‌هایی داشت و برای کاربر نامطلوب بود، منسوخ گردد.
هم‌اکنون شیوه‌ی No CAPTCHA در برخی از سرویس‌های آنلاین بسیار معروف و قدرتمند مانند پی‌پال و وردپرس به کار بسته شده است.

یک جایگزین پیشنهادی جالب برای کپچا

همه روش‌های مبتنی بر کپچا، صرفا یک مانع چالش برانگیز سر راه مخاطب قرار می‌دهد و این مخاطب، اگر یک روبات باشد، منابعی که برای فرم ما صرف کرده، به هدر می‌رود و متضرر می‌شود اما به ما سودی نمی‌رسد.

اما Hashcash.io پیشنهاد جالبی داده است. گفته (حالا که اینقدر ربات‌ها زیاد شده) چرا ما از ربات‌ها سودی نبریم؟!

این سرویس با استفاده از سرویس وب‌ورکر که در html5 معرفی شده، از سی پی یوی کاربر، کار می‌کشه برای حل مسائل ریاضی و ... (مثل شکستن هش‌های خاص و ...) و نهایتا به شما حدود یک دلار بابت هر هزار بار لود شدن در صفحه میده که برای سایت‌های پربازدید می‌تونه وسوسه‌کننده باشه هرچند به نظرم آدم مسلمون یه کم احتیاط می‌کنه در این زمینه چون داره از رم و سی‌پی‌یو و باتری بیننده‌های سایت استفاده می‌کنه برای درآوردن پول!


یادداشت‌های مرتبط
  1. ابرکوکی و ذخیره ساز جدید HTML5
  2. رنگ ها و طراحی وب
  3. همه چیز درباره داده ها و تصاویر Inline درون برنامه ای
  4. انواع روش های شناسایی و احراز هویت کاربران یک صفحه وب
  5. بهینه سازی و کاهش حجم تصاویر برای استفاده در صفحات وب
  6. روش ها و تکنیک های پنهان کردن ایمیل
  7. زوم (zoom) و بزرگنمایی تصویر و متن با جاوا اسکریپت و پی اچ پی
  8. کار با تصاویر در سمت کاربر
  9. رنگ ها و برنامه نویسی وب

مدیریت

نام وسیله

اعتبار ورود

نام کاربری

رمز عبور

رمز یکبارمصرف

... لیست تمام یادداشت‌ها

تبلیغات

ربات‌های تلگرامی:
مجموعه ربات‌های تلگرامی ما برای ساده‌تر کردن کار با تلگرام و مدیریت کانال
دامنه‌های فروشی:
دامنه‌های زیر مربوط به ما یا مشتریان ماست که قابل واگذاری هستند. در صورت تمایل به داشتن یکی از آنها، با این اکانت تلگرامی مکاتبه نمایید.

دامنه‌هایی که می‌تواند مصرف تخصصی داشته باشد:
AnyDesk.ir, Firebase.ir, Angularjs.ir, 9px.ir alAdmin.ir, iQore.ir notion.ir, 3dn.ir,

دامنه‌هایی که می‌تواند مصرف فرهنگی/مذهبی داشته باشد:
mavaez.ir, 2aha.ir, babolelm.ir, mahjoor.ir

دامنه‌هایی که می‌تواند مصرف شخصی/عمومی داشته باشد:
azizami.ir, 90blog.ir