Да напишеш насила captcha модул

Публикувано / posted 2008-07-11 в категория / in category: Tangra Framework for PHP
  

В последните дни за занимавах да направя user registration модул за моя Tangra Framework for PHP. Както и се очакваше -- грандоманията в мен отново надделя и вместо на спретна набързо едно модулче с проста формичка за user details, аз се отплеснах и направих чудовищна форма с всички възможни полета за които се сетих, че е конфигурируема отгоре на това (т.е. може да се избере като се настройва сайта кои полета да се показват и кои да са задължителни).

Както и да е, направих регистрацията, админа и т.н. но в един момент покрай правенето на страница за "Resend activation email" е усетих, че злонамерени келеши могат да я използват за много успешна DOS атака. Налагаше се да сложа captcha.

Разрових се из интерсвинщината, свалих сигурно 7-8 различни PHP captcha генератори, но нито един от тях не беше подходящ за вграждане в модул -- едни бяха специално пригодени за определени приложения (като WordPress например) и изискваха доста преработка, други бяха страшно мърляво написани, трети бяха прекалено обемисти и т.н.

Накрая се спрях за основа на http://www.white-hat-web-design.co.uk/articles/php-captcha.php -- кратък код, малко калпав, ама лесно се оправяше.

Основният ми проблем с писането на captcha модул беше, че точно с такава лигавщина, точно сега, ВЪОБЩЕ не ми се занимаваше. Покрай модула за user registration се наложи да направя и няколко спомагателни модула като db_table_countries  и db_table_usstates и те, общо взето, ми изсмукаха батериите, които използвам за писане на модули :-). В крайна сметка с голямо нежелание се захванах и в резултат сега има три нови модула:

  • captcha -- предоставя базовата функционалност -- генериране на код, показване на изображение;
  • form_field_captcha -- поле за формите, наследява Form_Field. За щастие се оказа, че стана много лесно.
  • form_field_captcha_html_tpl_metallic -- HTML template-и за form_field_captcha за metallic темата.

Captcha-та в крайна сметка има няколко допълнителни екстри в сравнение с оригиналния код, който използвах:

  • генерират се случайни цветове за буквите, фона и шума;
  • шума е с два цвята -- един като на буквите, другия близък до него -- доколкото съм чел за методите за анализ на изображения -- това затруднявало разработката на алгоритъм за разпознаване. Поне ламерите ще стоят настрани;
  • надписът се върти на случайно генериран градус;
  • шрифта, размера, броя символи се четат от конфигурационен файл.

Мислех дали да не направя всеки символ да си се върти поотделно, но реших, че е прекалено. Ако някой успее да напише програмка за разпознаване в сегашния вид -- халал да му е DOS-a :-).

Всъщност, ако човек се замисли реално, какъвто и captcha да сложиш, ако потенциалната печалба от пробиването му е достатъчно висока -- все ще се намери някой да я свърши тази работа. Хората вече правят софтуер за разпознаване на човешки лица. Най-вероятно до една-две години ще се наложи всички captcha да са прости семантични задачки, а не графични изображения.


2 Responses to “Да напишеш насила captcha модул”

  1. Zipp says:

    Блин что за народ… Каждый себе капчу пишет… Я даже с загадками видел))

  2. Чак сега осъзнавам колко е голям проблема. Аз не пиша за Интернет и не ми трбват такива модули, но много ме дразният тези букви и цифри, дето всеки път трбва да ги пиша.

Leave a Reply

Внимание: Моля, въведете само ПЪРВИТЕ ТРИ цифри от картинката
Important: Please enter just the first three digits from the image