Як малювати стійкі до розпізнавання написи? Для того, щоб відповісти на це питання, слід відповісти на інший - за яким принципом будуються алгоритми розпізнавання. Тоді ми зрозуміємо, як це розпізнавання максимально утруднити.
Всупереч поширеній думці, для обходу CAPTCHA, як правило, не використовуються універсальні програми розпізнавання відсканованих текстів типу FineReader або MS Office Document Imaging, тому, якщо ваша CAPTCHA не піддається розпізнаванню цими програмами, це не означає, що напис не може бути легко розпізнана заточеною саме під неї персональної распознавалкой (див. розділ Приклади злому).
Розпізнавання ділиться на 2 основних етапи:
- Позиціонування і кордонів кожного символу.
- Власне розпізнавання символу.
Якщо символи завжди знаходяться на одних і тих же місцях (як, наприклад, у форуму Invision Power Board - см. Ілюстрацію праворуч), з цих двох етапів залишається тільки другий. Тому, як мінімум, треба обов'язково варіювати координати символів.
Якщо місця символів не фіксовані, наступний шлях по їх виділенню - порівняння за контрастом з фоном. Якщо колір символів відрізняється від кольору фону (як у форуму phpBB), це не дає ніякого захисту:
Залишили тільки темні пікселі - і "вуаля".
Жовтим виділені виявлені знакомісця (прямокутники, що містять в собі "темні пікселі")
Таким чином, слід або додати такий шум, який важко відокремити від самих символів, або ускладнити поділ символів, помістивши їх впритул або наклавши один на одного.
Власне розпізнавання символу може відбуватися різними способами.
Найпростіший спосіб - "накладення маски". У програми є еталонний шрифт, з кожним символом якого вона порівнює розпізнається. Той символ, у якого найбільше збігів (пікселів того ж кольору, що і в ідеалі), і вважається відповіддю.
Порівняно з маскою схильні CAPTCHA, які не застосовують геометричні спотворення символів, а також використовують один шрифт (або дуже обмежене їх кількість).
Інші, більш складні алгоритми розпізнають символ по його характерними ознаками: кількістю розгалужень, замкнутих областей, їх взаємного розташування. Є клас алгоритмів під назвою "нейронні мережі" - це, грубо кажучи, чорний ящик, якому спочатку для навчання дають образ і правильну відповідь, а потім, після навчання, він зможе видавати правильну відповідь сам. Правда, процес навчання дуже довгий і трудомісткий.
Для захисту від таких алгоритмів можна додавати шум, значно спотворює малюнок символів, але тут є небезпека перестаратися і отримати зображення, що не піддається розпізнаванню і людиною.
Вважаю, що найбільшу увагу слід звертати на перший пункт захисту - від виявлення кордонів символу - важко розпізнати символ, якщо невідомо, де він починається і закінчується.
Розглянемо застосування цих принципів на прикладах реальних CAPTCHA (зірочками у назви показана моя особиста оцінка захищеності - від 1 до 4):
Google ***
Нелінійне спотворення написи, зміщення символів один щодо одного, близьке розташування символів, різні шрифти.
Шуми не застосовуються. Правда, символи не завжди склеюються без проміжків.
MSN ****
Поворот і спотворення символів, шуми у вигляді ліній того ж кольору, що перетинають символи.
Yahoo ***
Нелінійне спотворення символів, шум у вигляді перетинає символи ламаної.
З недоліків - ламана може бути відділена від символів.
Mail.ru дуже стара **
Поворот символів, невелике варіювання шрифтів, низький контраст з фоном. На мій погляд - не дуже хороша CAPTCHA (символи, як правило, темніше шуму, розташовані відокремлено)
Mail.ru стара ****
Зсув по висоті, нелінійне спотворення символів, шум у вигляді перетинають символи ламаних того ж кольору.
Yandex ****
Склеювання контурних символів, нелінійні спотворення, шум у вигляді білих і темних ліній.
Rambler стара **
Різнобарвні символи, поворот, зсув. Шум у вигляді точок і прямих ліній.
Rambler ***
Нелінійне спотворення символів. Символи, однак, легко відокремлюються одна від одної і від шуму. Справа тільки за розпізнаванням символів, а це не так складно навіть без залучення нейронних мереж (з огляду на те, що символи є цифрами і спотворюються в основному по горизонталі).
Білайн ***
Невеликі лінійні спотворення символів, різний розмір. Символи поміщені на фон з шумом у вигляді геометричних фігур (еліпсів) методом інверсії. Недолік: цифри контрастніше фону.
МТС стара **
Невеликий поворот, зсув символів. Зрідка наползание їх один на одного. Шум легко забирається зменшенням різкості (blur). Досить слабка CAPTCHA
МТС нова ***
Невеликий поворот, зсув символів. Зрідка наползание їх один на одного. Шрифти. Значний шум, як у вигляді фонової текстури, так і ліній, що накладаються на символи. Правда, зрідка навіть людина не завжди легко прочитає результат.
Мегафон ***
Зсув символів, шум у вигляді ліній і точок.
Паралельні лінії можуть бути відфільтровані, з похилими складніше.
# 10097; Створення дизайну сайтів, тільки дизайн без верстки, макет PSD - від 5 до 10 т.р.
Портфоліо і приклади робіт. Дизайнер: [email protected] Skype: tanditl Любов (Teolinka)