پنج‌شنبه ۹ فروردین ۱۴۰۳ |  عضویت / ورود

کپچا چیست؟ [CAPTCHA] (كمی درباره مهار موتورهایی كه نظرات ناخواسته می‌فرستند)


يكي از مشكلات يا بهتر بگويم، معضلات سايت‌ها، به خصوص سايت‌هايي كه از سورس‌هاي جهاني استفاده مي‌كنند (مثل سيستم‌هاي مدريت محتواي WordPress - PHPNuke - Mambo و...)، اين است كه اسپمرهاي جهاني نيز با آن‌ها پا به پا مي‌آيند!

اگر شما خودتان برنامه‌نويس سيستمتان باشيد، احتمالاً هيچ كس نمي‌تواند بفهمد مثلا براي ارسال يك نظر، چه تابعي با چه نامي و چه متغيرهايي استفاده كرده‌ايد، اما اگر اين سيستم OpenSource باشد، كارتان زار است! آن‌وقت است كه هر كاربري كه بخواهد، خيلي راحت مي‌تواند از طريق نواقصي كه خودش يا ديگران كشف مي‌كنند، با شما شوخي كند!! چون سورس‌كدهاي شما را او نيز دارد.

البته كساني كه سيستم‌هاي جهاني را مي‌نويسند، خودشان استاد اين كارها هستند و طبيعتاً تمامي راه‌هاي شوخي را مي‌بندند! اما مشكل زماني بروز مي‌كند كه يك كاربر ناشي بخواهد براي اين سيستم‌ها در اصطلاح ماژول بنويسد! و مشكل زماني بدتر مي‌شود كه شانس اين كاربر ناشي خوب باشد و اين ماژول، جهاني شود!! و ده‌ها سايت اين ماژول را روي سيستمشان پياده كنند...

يكي از مهم‌ترين مشكلاتي كه در سيستم‌هاي مديريت محتوا ممكن است وجود داشته باشد، جاهايي مثل «ارسال نظر» است كه كاربران دستشان باز گذاشته مي‌شود. اين موقع است كه اسپمر(Spamer)ها (كساني كه تبليغات ناخواسته ارسال مي‌كنند) شروع به نوشتن روبات‌هايي مي‌كنند كه از طريق بخش نظرات، آنچه كه آن‌ها دلشان مي‌خواهد (و معمولاً تبليغ سايت‌ها با استفاده از شعارهاي س..كسي است!) را به عنوان نظر ارسال كنند...

كافي‌ست آدرس صفحه مربوط به نظرات را به روبات خود بدهند و از او بخواهند هر از چند گاهي به آن سايت سر بزند و تبليغشان را آنجا بگذارد. (راستي! منظورم از روبات، آن روباتي كه در فيلم «هوش مصنوعي» ديديد، نيست ها! منظورم قطعه كدي است كه كاري برنامه‌ريزي شده را تكرار مي‌كند)

اگر به بخش نظرات سايت‌هاي Low Level (سطح پايين) توجه كرده باشيد، با موجي از نظرات با نوشته‌هاي بي‌ربط و به زباني غيرفارسي يا زبان سايت مربوطه، روبرو خواهيد شد!

بيچاره، مدير سايت اگر كمي ناشي باشد، بايد هر بار شروع كند به پاك كردن تك‌تك همه نظراتي كه توسط يك روبات نامرد(!) ارسال شده است. كه شايد گاهي در هر روز از 50 ارسال تجاوز كند!

اما اگر به فرم‌هاي مختلف در سراسر اينترنت توجه كرده باشيد، مطمئنا با كاراكترهايي درهم و برهم شبيه شكل زير برخورد داشته‌ايد:

http://www.aftab.cc/uc/Hamid/761/captcha.jpg

احتمالاً قبلاً در مورد اين حروف چيزهايي شنيده‌ايد، اما اگر چيزي نشنيده‌ايد، من يك بار توضيح مي‌دهم:
اين ترفند در اصطلاح «CAPTCHA» (بخوانيد كپچا) نام دارد كه مخفف:

Completely Automated Public Turing Test to Tell Computers and Humans Apart

است. به مفهوم «تست تورينگ عمومي كاملاً اتوماتيك براي فرق‌گذاري بين كامپيوتر و انسان». (در مورد آلن تورينگ مي‌توانيد در پست‌هاي قبلي‌ام چيزهايي بخوانيد)
توضيح ساده اينكه:
براي جلوگيري از فعاليت روبات‌هاي اسپمر، در بين كدهايي كه وظيفه افزودن نظرات، نام‌هاي كاربري و كلاً فيلدهاي يك فرم را به ديتابيس سايت به عهده دارند، كدي قرار داده مي‌شود كه ابتدا تست مي‌كند كه اگر حروفي كه در اين كادر نوشته شده است، درست نوشته شده بود، اجازه افزودن اطلاعات داده شود، در غير اينصورت، اين امكان وجود نداشته باشد.

هدف از كپچا (CAPTCHA) چيست؟

خوب، طبق گفته آلن تورينگ، هنوز بشر نتوانسته است روباتي بسازد كه في‌الان تصميم بگيرد كه بايد چه كاري انجام دهد و طبيعتاً آن روبات نمي‌تواند بفهمد الان داخل اين كادر چه حروفي نوشته شده است. چون همانطور كه متوجه شده‌ايد، اين حروف هر بار به صورت رندوم (تصادفي) تغيير مي‌كند...

جالب است بدانيد كه اگر اين حروف درهم نباشند، ممكن است روبات عكس را اسكن (با استفاده از تكنولوژي OCR) كند و نوشته را خارج كند و در فيلد مربوطه وارد نمايد و حتي روبات‌هايي هستند كه اين حروف درهم را هم اسكن مي‌كنند!!! پس الان مي‌توانيد بفهميد چرا اين حروف همينطور هر روز درهم‌تر و كثيف‌تر از از ديروز مي‌شوند! چون روبات‌ها هر روز قوي‌تر مي‌شوند.

يك جوك در اين زمينه:
به اين كپچا نگاهي بيندازيد:

جدا از اينكه اين كپچا مي‌تواند يك شوخي بامزه باشد، به نظر من ماهيت هوش مصنوعي در آينده‌اي نه چندان دور را مي‌‌رساند!
يعني روزي خواهد رسيد كه روبات‌ها آنقدر هوشمند مي‌شوند كه نه تنها مثل من و شماي انسان مي‌توانند نوشته داخل اين كادر را بخوانند، حتي مي‌توانند در كسري از ثانيه، جواب آن را بيابند و داخل كادر بنويسند!

و اما در مورد آفتابگردان:

چند روزي هست كه متوجه شدم كه آدرس چند بخش از بخش‌هاي ارسال نظر در «آموزش‌هاي سايت» جزء ليست سفيد(!) يك اسپمر قرار گرفته است! اين ماژول هم جزو آن دسته از ماژول‌هايي‌ست كه احتمالاً يك شبه و توسط يك برنامه‌نويس مبتدي نوشته شده است و در عين ناباوري، بسياري از سايت‌هاي مشهور از آن استفاده مي‌كنند! و طبيعتاً به همين دليل است كه يك اسپمرساز پيدا شده كه يك روبات براي آن نوشته است!

تا چند روز پيش، اگر به بخش «جديدترين نظرات» مي‌رفتيد، شاهد بوديد كه ده‌ها نظر به صورت انگليسي و شامل آدرس سايت‌هاي غيراخلاقي در آن‌ها وجود دارد...

http://aftab.cc

براي رفع اين مشكل، در ابتدا، چند روزي صفحه ارسال نظرات را حذف كردم، اما در عين ناباوري متوجه شدم كه باز هم نظرات ناخواسته، ارسال مي‌شود!

در مرحله بعد، حدس زدم كه اين روبات از باگ اين ماژول استفاده مي‌كند و بدون استفاده از فرم، اطلاعات را وارد تيبل مي‌كند. به همين دليل، اسم تيبل (Table) مربوط به نظرات در ديتابيس را به يك نام ديگر تغيير دادم، اما باز هم متوجه شدم كه نظرات ناخواسته ارسال مي‌شود!

در قسمت بعد عمليات(!)، لينك به صفحه ارسال نظر را از زير آموزش‌ها برداشتم و در زير هر آموزش يك فرم طراحي كردم، كه الان مي‌توانيد در زير همه آموزش‌ها ببينيد (به طور مثال، اين آموزش) اما باز هم نظرات، ارسال مي‌شد!

بعد، رفتم شروع كردم به طراحي يك ضداسپم. اگر به فرم توجه كنيد، مي‌بينيد كه از شما خواسته شده است بعد از نوشتن نظرتان، جمع دو عددي كه مي‌بينيد را در كادر مربوطه وارد نماييد:

http://aftab.cc

در تابعي كه اطلاعات را وارد ديتابيس مي‌كند، گفته‌ام اگر كاربر مجموع دو عدد را درست وارد كرد، اجازه ورود بده، وگرنه، خير.
لازم به ذكر است كه اين اعداد هر بار به صورت رندوم تغيير مي‌كنند و همراه با نظر شما به صفحه بعد منتقل مي‌شوند. در آن صفحه، شما يك عدد وارد كرده‌ايد، من هم آن دو عدد را (و طبيعتاً مجموع آن دو متغير را) دارم و با هم مقايسه مي‌كنم... اگر درست بود كه يعني شما انسانيد و اگر نه، يعني احتمالاً روباتي نظر فرستاده است!

اما باورتان نمي‌شود اگر بگويم كه باز هم نظرات ناخواسته در ديتابيس درج مي‌شد!!!

داشتم كم‌كم نااميد مي‌شدم كه نكته اساسي يادم افتاد! متوجه شدم كه اين روبات با استفاده از يك فرم از پيش طراحي شده، دو متغير اصلي كه براي تابع comment نياز است (يكي شماره آموزش و يكي شماره شاخه آن) را به همراه اطلاعات فرم (نام كاربر و نظرش) به تابع مي‌فرستد. يعني، فرم جديد من كه دو متغيير براي اعداد رندوم و يكي براي جمع آن‌ها اضافه شده است را به فرمي كه داده‌ها را مي‌خواند نمي‌فرستد. در نتيجه، تابع، آن‌ها را صفر در نظر مي‌گيرد و جمع 0 با 0 مي‌شود، صفر، پس يعني اطلاعات، درست وارد شده است!!!

نكته اينجا بود كه من فراموش كرده بودم به محض تعريف تايع comment بگويم اگر متغييري به نام randsum كه جمع دو عدد وارد شده توسط كاربر است، از طريق فرم صفحه قبل، به صفحه پردازش (يا صفحه Handle) ارسال شده بود، آن‌وقت بيا و چك كن كه كاربر اصلا درست وارد كرده يا خير! اگر چنين متغييري به صفحه‌ي هندل ارسال نشده بود، به كاربر هشدار بده كه "به صورت غيرمجاز در حال ارسال نظر هستيد"...

در شكل زير، قسمتي كه به صورت سفيد نمايش داده شده، چك مي‌كند كه كاربر فرم جديد را پر كرده و اصلا داده‌اي به عنوان مجموع به صفحه هندل وارد شده يا خير:

http://aftab.cc

خلاصه، بعد از كلي ماجرا توانستيم اين روبات سمج را مهار كنيم!
اما واقعاً از اون ممنونم. فكرش را كنيد، به من كلي نكته آموخت، به شما و خيلي‌هاي ديگر كه اين مقاله را مي‌خوانند نيز نكاتي در مورد كپچا و ... ياد داد و باعث شد كه من در آينده طوري برنامه‌ريزي كنم كه زيان‌هاي از اين سنگين‌تر متوجهم نشود!
به همين دليل است كه هميشه هكرها و كركرها و نامردهاي اينترنتي را تشويق كرده‌ام!! خدا خيرشان بدهد!


[ارسال شده در مورخه : جمعه، 16 آذر، 1386 توسط Hamid]
[ #دانستني‌هاي IT]



بازدیدها از این مطلب: 12416 بار   امتیاز متوسط :   تعداد آراء: 1   امتیاز دهید:

نظرات طرح شده

نام: [ کاربر جدید ]
ایمیل:

نظر:


اجازه استفاده از تگهای HTML را ندارید


جمع عدد 5 با 14 را در كادر زیر وارد نمایید:
(این كار برای جلوگیری از فعالیت موتورهای اسپمر است)


* توجه: نظر شما بعد از بررسی، نمایش داده خواهد شد.

alavi                توسط alavi در مورخه : شنبه، 26 اردیبهشت، 1388(لینک نظر)
سلام ممنون در مورد capttcha


[ ارسال جوابیه ]


maryam (امتیاز : 0)(لینک نظر)
توسط maryam در مورخه : پنجشنبه، 21 مرداد، 1389
سلام . خیلی مفید بود.

من برای پروژم نیاز به کد کپچایی مثل این دارم، ممنون میشم اگه source اش و توضیحات نصبش و برام بفرستین.


[ ارسال جوابیه ]


علي                توسط علي در مورخه : سه شنبه، 27 تیر، 1391(لینک نظر)
سلام

خيلي جالب بود وچيز ياد گرفتم


[ ارسال جوابیه ]