Система CAPTCHA
Міністерство науки та освіти України
Національний технічний університет
“Харківський політехнічний інститут”
Кафедра “Обчислювальна техніка та програмування”
Реферат на тему:
«Система CAPTCHA»
Виконав:
студент групи КІТ-11а
___________/Шкарупа М. М./
«_____» __________ 2006 р.
Харків 2006
Зміст
TOC \o "1-3" \h \z Введення. \h 3
Для чого потрібний тест CAPTCHA.. \h 5
Варіанти реалізації CAPTCHA.. \h 7
Приклади реальних систем CAPTCHA.. \h 11
Уразливі місця CAPTCHA.. \h 14
Передбачення результатів і перебір варіантів. \h 14
Використання неіснуючих сесій і повторне використання сесій. PAGEREF _Toc136616294 \h 15
Розпізнавання. PAGEREF _Toc136616297 \h 18
Методи, що роблять важким розпізнавання. \h 20
Програмний приклад реалізації CAPTCHA.. \h 21
Аналіз наведеного прикладу. \h 24
Введення
CAPTCHA - це абревіатура від англійських слів "Completely Automated Public Turing Test to Tell Computers and Humans Apart", що в перекладі означає: повністю автоматичний тест Тьюрингу для розрізнення комп'ютерів та людей.
Що ж таке Тест Тьюрингу? Це тест, запропонований Аланом Тьюрингом в 1950 р. у статті «Обчислювальні машини й розум» (Computing machinery and intelligence) для перевірки, чи є комп'ютер розумним у людському розумінні цього слова.
Суддя (людина) переписується природною мовою із двома співрозмовниками, один із яких - людина, інший - комп'ютер. Якщо суддя не може надійно визначити, хто є хто, комп'ютер пройшов тест. Передбачається, що кожний зі співрозмовників прагне, щоб людиною визнали його. З метою зробити тест простим й універсальним, переписка зводиться до обміну текстовими повідомленнями.
Повідомлення відправляються через однакові проміжки часу, щоб суддя не міг робити висновку виходячи зі швидкості відповідей (у часи Тьюрингу комп'ютери реагували повільніше людини. Зараз це правило необхідно, тому що вони реагують набагато швидше, ніж людина).
Тест був зроблений салонною грою, у ході якої гості намагалися вгадати стать людини, що перебуває в іншій кімнаті, шляхом написання питань і читання відповідей. В оригінальному формулюванні Тьюринг, людина повинна була прикидатися людиною протилежної статі, а тест тривав 5 хвилин. Зараз ці правила не вважаються необхідними й не входять у специфікацію тесту.
Тьюринг запропонував тест, щоб замінити безглузде, на його думку, питання «чиможе машина мислити?» на більш конкретне.
Тьюринг пророчив, що комп'ютери в остаточному підсумку пройдуть його тест. Він вважав, що до 2000 року, комп'ютер з пам'яттю 1 мільярд біт (близько 119 Мб) у ході 5-хвилинного тесту зможе обдурити суддів в 30% випадків. Це, нажаль, не збулося.
Поки що жодна програма й близько не підійшла до проходження тесту. Такі програми, як Еліза (ELIZA), іноді змушувала людей вірити, що вони говорять із людиною, як, наприклад, у неформальному експерименті, названому AOLiza. Але такі «успіхи» не є проходженням тесту Тьюринга.
По-перше, людина в таких бесідах не мала ніяких підстав вважати, що вона говорить із програмою, у той час як у дійсному тесті Тьюринга людина активно намагається визначити, з ким він розмовляє.
По-друге, документовані випадки ставляться у таких чатах, як IRC, де багато бесід короткі та доволі безглузді.
По-третє, багато користувачів IRC використають англійський як другу або третю мову, і безглузда відповідь програми, імовірно, спишеться ними на язиковий бар'єр.
По-четверте, багато користувачів нічого не знають про Елізу і їй подібних програмах і не можуть розпізнати зовсім нелюдські помилки, які ці програми допускають.
Тест CAPTCHA мало схожий на той тест, що проводився в 50-ті роки. Але ідея тесту залишилася незмінною: відрізнити людини від машини. CAPTCHA - це завдання, що легко вирішує людина, але яку неможливо (або важко) навчити вирішувати комп'ютер.
Для чого потрібний тест CAPTCHA
У сучасному світі людині все частіше доводиться зіштовхуватися з роботами. Роботи управляють трубопроводами, підтримують технологічний процес, виконують складні обчислення. Існує безліч роботів і в мережі Internet - тут їх, як правило, скорочено називають ботами. Internet боти стежать за порядком у чатах, займаються розсиланням листів, індексую WEB сторінки для прискорення пошуку. Однак не всі боти займаються корисною діяльністю. Існує безліч ботів написаних для деструктивних цілей. На просторах мережі часто зустрічаються:
- боти для захватів чат - кімнат в IRC;
- боти для збору адресів e-mail і розсилання за ними спаму (небажаної кореспонденції, як правило рекламного характеру);
- флуд-боти, що займаються “засміченням” форумів і гостьових книг;
- боти, що проводять масову регистрацію облікових записів на поштових й інших сервисах;
- боти, що займаються автоматичним підбором паролів;
- боти, що роблять накручення лічильників відвідуваності сайтів;
- боти для розсилання SMS через WEB інтерфейси;
- боти для участі в голосуваннях;
- й інші.
Причому проблема ботів - це далеко не надумана проблема. Про її реальності говорить хоча б колосальний обсяг спаму в Internet сьогодні.
Рішенням проблеми ботів може стати тест CAPTCHA. Цей тест найчастіше застосовується для захисту WEB форм від автоматичного заповнення. Іноді дуже важливо чи знати заповнена форма людиною або ж її заповнив бот.
Людину від бота, звичайно, можна відрізнити за рядом непрямих ознак наприклад по швидкості заповнення форми (комп'ютер робить це набагато швидше людини) або по IP адресу (з одного IP адресу надходить цілий ряд запитів на заповнення однієї й тієї ж форми) та ін. Такі перевірки робляться досить простими методами.
Але за простотою таких перевірок криється й простота їхнього обходу з боку бота. Тому такі непрямі перевірки застосовуються лише як допоміжний засіб, а як основний засіб виступає саме CAPTCHA.
Варіанти реалізації CAPTCHA
На сьогоднішній день існує безліч реалізацій цього тесту для мережі Internet від примітивних до найскладніших, які тільки здатна видумати людина.
Перелічимо деякі з них:
1. Найпоширеніша реалізація CAPTCHA - це буквено-цифровий тест. Суть його полягає у наступному: при заповненні форми людині показується картинка з деяким випадковим набором букв та цифр, а поруч із картинкою текстове поле в яке необхідно ввести символи зображені на картинці. Якщо введені в текстовому полі символи й символи на картинці збігаються тоді заповнена форма приймається до обробки, а якщо ні, то генерується нова картинка й людини просять увести ще раз символи з картинки. Це просте завдання для людини, але для бота воно вже досить важке. Як правило зображення на картинці зашумлюють для ускладнення спроб автоматичного розпізнавання. Приклад цієї реалізації можна побачити на рисунку 1.
Рис. 1. Варіант реалізації CAPTCHA №1
2. Іноді застосовують спрощену для користувача реалізацію описаного в першому пункті тесту, коли користувачеві показують усе той же випадковий набір символів і пропонують кілька варіантів відповіді. У цьому варіанті реалізації тесту вже неможливо зробити помилку при наборі тексту й тому після першої або другої неправильної відповіді IP адреса блокується на кілька годин. Приклад цієї реалізації можна побачити на рисунку 2.
Рис. 2. Варіант реалізації CAPTCHA №2
3. Існує також комбінація першого й другого варіанта тесту. Людині виводиться у вигляді картинки текст, що спонукує його до деякої дії (наприклад “натисніть на хвіст кішці”). А поруч із текстом розташовується картинка з декількома об'єктами (у нашому прикладі ними можуть бути кішка, собака, равлик). Координати натискання по картинці відслідковуються й перевіряються. Причому питання й супутня йому картинка із предметами щоразу різні. Приклад цієї реалізації можна побачити на рисунку 3.
Рис. 3. Варіант реалізації CAPTCHA №3
4. Людині показують картинку з якимось об'єктом (наприклад портрет Гоголя або Толстого) і просять увести його назву (у нашому випадку прізвище письменника). Як правило картинки перекручені випадковими дефектами, щоб бота не навчили розпізнавати всі картинки тесту. Приклад цієї реалізації можна побачити на рисунку 4.
Рис. 4. Варіант реалізації CAPTCHA №4
5. Людині показують кілька картинок (частіше всього 3 або 4), на яких зображено декілька предметів, і просять ввести назву того предмета, що є на всіх картинках. Приклад цієї реалізації можна побачити на рисунку 5.
Рис. 5. Варіант реалізації CAPTCHA №5
6. Для людей з поганим зором є звукові тесті CAPTCHA.
Є й інші варіанти реалізації CAPTCHA, проте вони досить складні у програмній реалізації і тому використовуються дуже рідко. Ми не будемо їх торкатися у подальшому.
Приклади реальних систем CAPTCHA
Найбільш широкого розповсюдження набули тести CAPTCHA у так званому буквено-цифровому вигляді.
Наведемо декілька прикладів:
1. На сайті мобільного оператору UMC (http://www.umc.ua) система CAPTCHA захищає форму відправлення SMS від автоматичного заповнення ботами. У таблиці 1 представлено декілька картинок з цього сайту.
Таблиця 1.
Як можна побачити на фоні зачумленому випадковим чином відображаються повернуті на різний кут символи. Слід зазначити, що символи можуть “наповзати” один на одного, що може значно ускладнити спроби розпізнавання.
2. На сайті іншого мобільного оператору Київстар (http://www.kyivstar.net) система CAPTCHA теж захищає форму відправлення SMS від автоматичного заповнення. У таблиці 2 представлено декілька картинок з цього сайту.
Таблиця 2.
Система CAPTCHA на сайті Київстар дещо слабша ніж на сайті UMC. У Київ стар і символів на один менше і самі символи написані без будь яких викривлень, що зробило би важчим розпізнавання. Але, слід зазначити, що CAPTCHA на сайті Київстар більш дружня до користувача чим на сайті UMC. На останньому іноді трапляються картинки, які навіть людині важко розпізнати.
3. Система управління контентом Bitrix, на якій працює відомий сайт SecurityLab (http://www.securitylab.ru), теж має у своєму складі систему захисту CAPTCHA, яка захищає форум сайту. Приклади картинок наведено у таблиці 3.
Таблиця 3
На думку автора цих рядків ця реалізація одна з найбільш вдалих реалізацій CAPTCHA у сучасному Internet. Символи перехрещуються, виходять за межі поля, а іноді майже зливаються з фоном, проте гарно читаються користувачем завжди. А для машини розпізнавання таких символів майже неможлива задача.
4. Система захисту e-mail адресу від автоматичних ботів-збирачів адресів з WEB сторінок. Приклад можна побачити на рисунку 6.
Рис. 6. Система захисту від спаму на основі CAPTCHA
З кожного e-mail адресу (наприклад Joe2006@domain.com) береться лише логін – це та частина, що стоїть перед символом @ (тобто “Joe2006”). Потім з логіну виділяють префіксну частину (у нашому випадку це “Joe”) та записують її простим текстом. А ту частину що залишилася (“2006”) виводять скористувавшись механізмом CAPTCHA.
Тепер бот, що продивився сторінку, проігнорував усі картинки на ній, прочитає поштову адресу як Joe@domain.com та буде слати на неї листи, які будуть потрапляти на поштову скриньку, яка знаходиться під наглядом програми, що аналізує та блокує спам.
А коли цю e-mail адресу побачила на сторінці людина – то вона звісно прочитала не тільки префікс а й ту частину, що була на картинці і буде слати листи за вірною адресою Joe2006@domain.com
Таким чином бот буде гадати, що він працює зі справжніми адресами, в той час реально він буде взаємодіяти з програмою спам аналізу та блокування. Таким чином антиспамовий фільтр може бути достатньо гарно натренований і застосований для захисту усіх інших поштових скриньок на domain.com, а адміністратор може бути спокійним за те, що під дію антиспамового фільтру раптово потрапить важлива кореспонденція.
Уразливі місця CAPTCHA
На перший погляд можне здатися, що CAPTCHA це панацея проти ботів, але насправді це далеко не так. У CAPTCHA є цілий ряд уразливих місць, які дозволяють у деяких випадках зламати захист, а у деяких випадках просто обійти його.
Обійти захист CAPTCHA можна скориставшись особливостями програмної реалізації системи. Найбільш часто зустрічаються помилки при реалізації роботи з сесіями на PHP та ASP .NET, помилки при формування URL, що викликає генерацію зображення для CAPTCHA та деякі інші помилки.
Зламати захист CAPTCHA можна розпізнавши образ на рисунку. Розпізнати образ у найпростішому варіанті можна завдяки тесту на ідентичність, а у більш складних варіантах скориставшись нейтронною мережею.
Передбачення результатів і перебір варіантів
Передбачення результатів можливо лише тоді, коли відомо яка інформація прямо впливає на генерацію CAPTCHA. Одержати її можна у двох випадках: уразлива програма надається у відкритому вихідному коді або необхідні дані отримують за допомогою евристичного аналізу (певна кількість проведених тестів). Такою інформацією може бути IP адреса, знання про використовуваний генератор випадкових чисел. Завдання, зрештою, зводиться до пошуків формули, по якій створюється тест. Тут хакеру знадобляться знання з математичного аналізу.
Перебір усіх можливих варіантів відповіді - теж працездатний прийом. Повним перебором можна скористатися, якщо ПО на сервері, некоректно працює із сесією. Прикладом може служити форум vBulletin.
Використання неіснуючих сесій і повторне використання сесій
Як правило, значення, записане на картинці, скрипт зберігає в сесії в текстовому вигляді, щоб потім порівняти з тим значенням, що ввів користувач, тому дуже важливо, щоб робота із сесією відбувалася коректно. Прочитати з поточної сесії текстове значення ні бот ні користувачів не зможуть, однак цілком можливий варіант підміни сесії на неіснуючу (як приклад - зламаний CAPTCHA на сайті UMC). Іноді буває досить один раз пройти тест і запам'ятати ідентифікатор сесії, щоб потім можна було безперешкодно багаторазово обманювати тест CAPTCHA (так було з реалізацією тесту в популярному форумі vBulletin).
Тест на ідентичність
Даний спосіб може застосовуватися, для розпізнавання зображень із низьким рівнем шумів або з їхньою повною відсутністю. Його суть полягає в тому, що для ідентифікації символів досить порівнянь окремих фрагментів зображення.
Щоб не бути голослівним наведемо приклад. Нехай нам необхідно розпізнати картинку на рисунку 7а.
Рис. 7. Розпізнавання зображень за
допомогою тесту на ідентичність
Спочатку необхідно позбутися від клітинки. Алгоритм у цьому випадку дуже простий - світло зелені кольори клітинки “заливаємо” кольорами фону й одержуємо те, що зображено на рисунку 7б.
Потім необхідно виділити окремо кожний символ (дивися рисунок 7в). І вже потім порівняти із заздалегідь підготовленим еталоном за допомогою порівняння піксел за пікселом. Метод досить простий і досить ефективний.
Розпізнавання образів
Однак далеко не будь-яку CAPTCHA можна зламати за допомогою тесту на ідентичність. Часто зустрічаються CAPTCHA з безліччю нелінійних випадкових деформацій, які не піддаються або погано піддаються порівнянню із заздалегідь заготовленими еталонами.
Як же працює розпізнавання образів? Багато користувачів ПК напевно зустрічалися з програмою FineReader, що “на лету” розпізнає величезні масиви тексту. Оброблюваний ним текст має відносно малі розміри й великий обсяг. А до всього й швидкість розпізнавання на високому рівні.
Інша справа CAPTCHA: з однієї сторони нормальний розмір і короткий текст, але з іншого боку - високий рівень шумів і деформацій.
На сьогоднішній момент уже існує багато проектів, що займаються тільки розпізнаванням CAPTCHA. Найбільш відомими з них є два: “UC Berkeley Computer Vision Group” і “PWNtcha”.
Члени “UC Berkeley Computer Vision Group” опублікували в Internet документ, що завіряє в тому, що їм вдається розпізнавати тести, що було сгенеровано за допомогою Gimpy. Причому відсоток успіху становить 92%.
На рисунку 8 наведені приклади досить непростих CAPTCHA, які були розпізнані названою вище групою дослідників.
Рис. 8. Приклади CAPTCHA які були розпізнані
співробітниками інституту Берклі
У питанні розпізнавання образів CAPTCHA великого успіху досягли члени групи PWNtcha. На відміну від “UC Berkeley Computer Vision Group”, які більше займалися розпізнаванням зображень, що було спеціально сгенеровано для проведення експериментів, програмісти з PWNtcha займаються винятково розпізнаванням існуючих популярних CAPTCHA. Результати опубліковані ними приголомшують (дивися таблицю 4).
Крім того працює цілий ряд online проектів по розпізнаванню CAPTCHA. Із програмами для розпізнавання можна ознайомиться на сайті http://www.captcha.ru, де у розділі “Приклади злому” представлені три програми злому CAPTCHA на форумах Invision Power Board, vBulletin і phpBB. По проведених тестах точність розпізнавання становила 100 (!) відсотків.
Найбільш ефективним методом розпізнавання образів на сьогоднішній день є використання нейронних мереж, що навчаються.
Таблиця 4.
Назва системи |
Приклад CAPTCHA |
Розпізнавання |
LiveJournal |
99% |
|
Paypal |
88% |
|
phpBB |
97% |
|
vBulletin |
100% |
|
linuxfr.org |
100% |
|
Authimage |
100% |
|
Clubic |
100% |
|
lmt.lv |
|
98% |
Slashdot |
89% |
У самому загальному вигляді алгоритм розпізнавання складних CAPTCHA має наступний вигляд:
1. Позбутися від шумів, що заважають розпізнаванню, на стільки, на скільки це можливо.
2. Виділити кожний символ окремо.
3. Привести його до нормального виду: повернути, відмаштабувати й перемістити в початок координат.
4. Представити його для розпізнавання нейронній мережі.
Звичайно ж перед цим нейронна мережа повинна бути відповідним чином навчена, тобто настроєна саме для розпізнання конкретної CAPTCHA. У загальному випадку нейронна мережа повинна навчаться для кожної CAPTHCA окремо. Навчити розпізнавати всі CAPTHCA одну універсальну нейронну мережу неможливо.
Методи, що роблять важким розпізнавання
Згідно з неофіційним рейтингом систем CAPTCHA на сайті http://ocr-research.org.ua сформулюємо та наведемо нижче список методів генерації зображень, що роблять розпізнавання більш с складним.
1. Застосування кольорових шумів на фоні, причому важливо, щоб хоча б одна складова шуму співпадали з кольором символів. Для людини виділити цільове зображення з шуму не є важкою задачею, а для машини це не що інше як розмиття контуру зображення.
2. Застосування різноманітних шрифтів, які кардинально відрізняються один від одного. У такому випадку нейрону мережу треба буде тренувати розпізнавати усі символи усіх використаних шрифтів, що може значно ускладнити роботу зловмисника.
3. Використання різноманітних кольорів шрифтів. Причому кольори підбираються таким чином, щоб символи у деяких місцях зливалися з фоном або шумами.
4. Використання лінійних та нелінійних викривлень – причому параметри цих викривлень завдавати випадково, щоб ускладнити процедуру повернення до нормального вигляду. Викривлення треба накладати на кожний символ окремо, а не на весь рядок одночасно.
5. Не треба розміщувати символи на статичних знакомісцях. Навпаки треба розкидати символи
6. Не треба використовувати у CAPTCHA словникових слів, бо розпізнавши вірно два чи три символи програма може по словнику підібрати все слово.
Програмний приклад реалізації CAPTCHA
Про CAPTCHA було сказано вже багато слів, тепер прийшов час навести приклад практичної реалізації тесту. Через те, що CAPTCHA найчастіше використовується у Internet для написання програми було обрано одну з найпопулярніших мов програмування для всесвітньої мережі PHP.
Файл class_captcha.inc.php
<?php
class ocr_captcha {
var $key; // Приватний статичний ключ
var $long; // Розмір тексту
var $lx; // Ширина зображення
var $ly; // Висота зображення
var $nb_noise; // Настройка шуму
var $filename; // Файл для зберігання на диск
var $imagetype="png"; // Розширення зображення;
var $lang="en"; // Мова
var $public_key; // Публічний ключ
var $font_file="comic"; // Шрифт
function ocr_captcha($long=6,$lx=120,$ly=30,$nb_noise=25) {
$this->key=md5("For generate private key");
$this->long=$long;
$this->lx=$lx;
$this->ly=$ly;
$this->nb_noise=$nb_noise;
$this->public_key=substr(md5(uniqid(rand(),true)),0,$this->long);
}
function get_filename($public="") {
if ($public=="")
$public=$this->public_key;
if (!is_dir("tmp")) // Чи вже існує
mkdir("tmp");
if (strpos($_SERVER['SystemRoot'], ":\\")===false) // linux
$rad="tmp/"; // Document_root works nicely here
else // windows
$rad="tmp\\";
return $rad.$public.".".$this->imagetype;
}
function generate_private($public="") {
if ($public=="")
$public=$this->public_key;
return substr(md5($this->key.$public),16-$this->long/2,$this->long);
}
function check_captcha($public,$private) {
// when check, destroy picture on disk
if (file_exists($this->get_filename($public)))
unlink($this->get_filename($public));
return (strtolower($private)==strtolower($this->generate_private($public)));
}
function make_captcha($noise=true) {
$private_key = $this->generate_private();
$image = imagecreatetruecolor($this->lx,$this->ly);
$back=ImageColorAllocate($image,intval(rand(224,255)),intval(rand(224,255)),intval(rand(224,255)));
ImageFilledRectangle($image,0,0,$this->lx,$this->ly,$back);
if ($noise) { // rand characters in background with random position, angle, color
for ($i=0;$i<$this->nb_noise;$i++) {
$size=intval(rand(6,14));
$angle=intval(rand(0,360));
$x=intval(rand(10,$this->lx-10));
$y=intval(rand(0,$this->ly-5));
$color=imagecolorallocate($image,intval(rand(160,224)),intval(rand(160,224)),intval(rand(160,224)));
$text=chr(intval(rand(45,250)));
ImageTTFText ($image,$size,$angle,$x,$y,$color,$this->font_file,$text);
}
}
else { // Випадковий колір
for ($i=0;$i<$this->lx;$i+=10) {
$color=imagecolorallocate($image,intval(rand(160,224)),intval(rand(160,224)),intval(rand(160,224)));
imageline($image,$i,0,$i,$this->ly,$color);
}
for ($i=0;$i<$this->ly;$i+=10) {
$color=imagecolorallocate($image,intval(rand(160,224)),intval(rand(160,224)),intval(rand(160,224)));
imageline($image,0,$i,$this->lx,$i,$color);
}
}
// Приватний текст для читання
for ($i=0,$x=5; $i<$this->long;$i++) {
$r=intval(rand(0,128));
$g=intval(rand(0,128));
$b=intval(rand(0,128));
$color = ImageColorAllocate($image, $r,$g,$b);
$shadow= ImageColorAllocate($image, $r+128, $g+128, $b+128);
$size=intval(rand(12,17));
$angle=intval(rand(-30,30));
$text=strtoupper(substr($private_key,$i,1));
ImageTTFText($image,$size,$angle,$x+2,26,$shadow,$this->font_file,$text);
ImageTTFText($image,$size,$angle,$x,24,$color,$this->font_file,$text);
$x+=$size+2;
}
if ($this->imagetype=="jpg")
imagejpeg($image, $this->get_filename(), 100);
else
imagepng($image, $this->get_filename());
ImageDestroy($image);
}
function display_captcha($noise=true) {
$this->make_captcha($noise);
$res="<input type=hidden name='public_key' value='".$this->public_key."'>\n";
$alt=($this->lang=="en")?("Image"):("Зображення");
$res.="<img src='".$this->get_filename()."' alt='$alt' border='0'>\n";
return $res;
}
}
?>
function display_captcha($noise=true) {
$this->make_captcha($noise);
$res="<input type=hidden name='public_key' value='".$this->public_key."'>\n";
$alt=($this->lang=="fr")?("Vous devez recopier dans le champ ci-dessous les ".$this->long." caractиres parmis 0 а 9 et A а F"):("Vous must read and type the ".$this->long." chars within 0..9 and A..F");
$res.="<img src='".$this->get_filename()."' alt='$alt' border='0'>\n";
return $res;
}
}
?>
Файл test.php
<html>
<head>
<title>Тест captcha - перевiрка людина/бот</title>
</head>
<body>
<h2>Введiть текст, що зображено на рисунку:</h2><br />
<?
require_once("./class_captcha.inc.php");
// Отримати параметри
if (isset($HTTP_POST_VARS['public_key']))
$public=$HTTP_POST_VARS['public_key'];
if (isset($HTTP_POST_VARS['private_key']))
$private=$HTTP_POST_VARS['private_key'];
$p=new ocr_captcha();
if (isset($HTTP_POST_VARS['private_key'])) {
if ($p->check_captcha($public,$private))
echo "<center><font color=\"green\">Ви пройшли перевiрку</font></center>";
else
echo "<center><font color=\"red\">Ви не пройшли перевiрку</font></center>";
}
echo "<form name=\"form1\" action=\"example.php\" method=\"POST\">\n";
echo $p->display_captcha(true);
echo "<br>\n";
echo "<input type=\"text\" name=\"private_key\" value=\"\" maxlength=\"6\" size=\"6\"><br>\n";
$private=$p->generate_private();
echo "<input type=\"submit\" value=\"Перевiрити\">";
?>
</body>
</html>
Аналіз наведеного прикладу
У результаті роботи наведеного коду ми маємо систему CAPTCHA, що зображено на рисунках 9, 10 та 11.
Рис 9. Загальний вигляд системи CAPTCHA
Рис 10. Якщо перевірка пройшла вдало
Рис. 11. Якщо перевірка пройшла невдало
Уважний читач може сказати, що далеко не всі описані вище методи, що роблять важким розпізнавання, були застосовані. Проте, якщо слідувати всім рекомендаціям, то ми отримаємо дуже важкий для розпізнавання тест CAPTCHA не тільки для бота але й для людини. Тому у більшості випадків при розробці тесту кожний розробник програмного забезпечення хоче знайти золоту середину між легкістю у читанні зображення для користувача і важкістю розпізнавання для боту.
Іноді легкість розпізнавання для користувача має більший вплив на розробника програмного забезпечення ніж питання надійності - саме тому і з’являються CAPTCHA, які може зламати навіть малодосвідчений програміст.
У наведеній реалізації CAPTCHA гарним рішеннями було:
- різнокольоровий фон;
- різнокольоровий шрифт;
- відсутність чітких знакомісць;
- місцями символи можуть перекриватися;
- було застосовано перевороти для кожного символу окремо.
Недоліки наведеної реалізації CAPTCHA:
-
- відсутність маштабування символів;
- перекриття символів зустрічаються рідко.
Таким чином отримали дружню до користувача систему CAPTCHA з середнім рівнем захисту від ботів.
Висновки
CAPTCHA – це дуже корисна та прогресивна технологія захисту від ботів. Але й досі не створено і мабуть не буде створено на 100 відсотків надійної CAPTCHA. Зламати будь яку існуючу систему це лише питання часу та грошей, і це ще раз підтверджує твердження “все, що збудовано людиною може бути нею і зламане”.
Хоча вже сьогодні чуються нові віяння у розробці CAPTCHA. На спеціалізованих сайтах вже можна побачити тестові трьохвимірні CAPTCHA. Але не треба бути пророком, щоб сказати – як тільки вони стануть широко використовуватися, то знайдуться й ті які навчаться їх обходити.
Також можна зробити припущення, що основним ворогом CAPTCHA у найближчому майбутньому стане не хакерське мистецтво, а нейроні мережі та розробки у галузі штучного інтелекту.
Використані джерела
4.