Да напишеш насила 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 да са прости семантични задачки, а не графични изображения.
|
Блин что за народ… Каждый себе капчу пишет… Я даже с загадками видел))
Чак сега осъзнавам колко е голям проблема. Аз не пиша за Интернет и не ми трбват такива модули, но много ме дразният тези букви и цифри, дето всеки път трбва да ги пиша.