Блакитно-жовта капча з оновленням картинки без перезавантаження сторінки
Квітень 01, 2008 Автор: adminСпробуємо трохи урізноманітнити сірі одноманітні капчі, що заполонили Уанет. Більше того, надамо картинці яскраво виражених українських рис, а також забезпечимо її нескладним, проте потрібним сервісом: оновлення картинки (при нечитабельності числа) без перезавантаження всієї сторінки і, як наслідок, без втрати даних, які з такими зусиллями були записані у Web-форму.
Щоб було зрозуміло про що йдеться, дивіться малюнок нижче:
![]()
Мал. 1. Вигляд «блакитно-жовтої» капчі з кириличним шрифтом CyrillicOld.
Про те, що таке капча, навіщо вона потрібна, її види і готові реалізації, Ви можете прочитати в одній із моїх попередніх статей.
Вимоги: на сервері має стояти PHP >= 4.0.6 і GD >= 2.0, для оновлення картинки потрібно, щоб була увімкнена в браузері мова JavaScript (якщо Ви її не вимикали, то вона на 99,9% увімкнена).
Принципи генерації (створення) картинки-капчі:
- Малюємо жовті букви на блакитному фоні.
- Малюємо блакитні букви на жовтому фоні.
- На другий малюнок копіюємо верхню половину першого.
Файли, необхідні для роботи капчі, Ви можете знайти в цьому архіві (розмір: 265 Кб). Всі скрипти детально коментовані, тому, гадаю, при потребі Ви легко дасьте раду з ними. Отже, що там є?
- index.php - в даному файлі є форма (щоб, Ви могли протестувати блакитно-жовту капчу);
- code.php - скрипт, що генерує малюнок-капчу;
- папка fonts - папка зі шрифтами для «таємного» числа (AdverGothicCamC, Arial, CharlesworthBold, CyrillicOld); після вибору вподобаного шрифту, решту можна спокійно видалити;
- loading.gif - статичний малюнок-піктограма «перезавантаження».
Ось, як виглядає сторінка «index.php» в браузері:

Мал. 2. Зовнішній вигляд форми із запропонованою капчею.
Зауваження! Щоб власноруч протестувати роботу скриптів, Ви маєте розмістити папку з архіву на сервері, який задовольняє вище згаданим вимогам, або ж поставити собі на комп’ютері (вдома чи на роботі) локальний Web-сервер. Трохи більше про локальні сервери можна почитати в моїй попередній статті. Для перегляду капчі в on-line режимі можна заглянути на сторінку http://vispyanskiy.name/captcha/.
Декілька слів про захищеність
- Основна перевага даної капчі полягає в її оригінальності. Адже, спам-роботи, як правило, налаштовані розпізнавати найбільш поширені види захисту. А даній реалізації до таких ще дуже і дуже далеко.
- Попри те, що текст на картинці не є викривлений, спам-роботу, щоб розпізнати символи, потрібно буде побавитися з двома кольорами. Адже, як бачите, до середини літера - жовта, а знизу - блакитна.
- Цифри не залишаються на одному місці, а динамічно рухаються в певному проміжку (коридорі). Також змінюється кут нахилу кожної цифри.
- Для тестування надійності капчі була здійснена спроба розпізнати за допомогою програми ABBYY FineReader 8.0 Professional Edition дану реалізацію, але безуспішно, що не може не тішити. Більше того, програмі не вдалося розпізнати жодного символу.
Зауваження! Даний тест на «людяність» є відносно легкий для розпізнання «живою» людиною, що збільшує ймовірність правильного введення «таємного» числа з першого разу і, як наслідок, збільшує ймовірність залишення коментаря до статті, відгуку в гостьовій книзі, тощо. Тому я б не радив накладати шум на картинку, який значно спотворить її, і можливо відлякає відвідувачів від тіснішого спілкування.
Як можна покращити захищеність даного тесту?
Найлегший спосіб - це збільшити / зменшити розмір шрифту (за замовчуванням вибрано 24px) або ж змінити шрифт на менш чіткий (за замовчуванням - CyrillicOld).
![]()
Мал. 3. Блакитно-жовта капча при розмірі шрифту 36px.
![]()
Мал. 4. Блакитно-жовта капча (шрифт - AdverGothicCamC).
Недоліки
- Обрана кольорова гамма (блакитно-жовта) не завжди підходить до дизайну сайту.
- Текст на картинці не є змазаним, а задній фон - статичний і тому розпізнання цифр для спам-роботів - відносно спрощене.
Як можна покращити даний проект?
- В разі, якщо число на картинці важко прочитати і активовано «Оновити картинку», можна реалізувати анімацію, яка б демонструвала, що щось в цей час відбувається, бо зараз малюнок-піктограма «перезавантаження» - статичний.
- Щоб підкреслити національність капчі, можна додати котрийсь із українських узорів до її фону. Наприклад, такий
![]()
Мал. 5. Український національний узор для майбутньої капчі.
Джерела:
- http://php5.ru/articles/image - обробка зображень засобами PHP.
- http://www.codenet.ru/webmast/php/Security-Images-in-PHP/ - захист Web-форм від автоматичної обробки.
Популярність: 31%
Теґи до статті: CAPTCHA, блакитно-жовта, капча, Уанет.

каже: 10.04.2008 о 12:20
Доброго дня пане, кажу вам відверто, мені сподобався ваш блог, але є маленьке зауваження, не працює RSS стрічка, будь ласка, перевірте.
каже: 10.04.2008 о 16:37
Дякую за позитивний відгук. Я ціную це. Я переглядав RSS в FireFox 2.0.0.13 та Opera 9.27. Ніби працює. Правда, RSS-стрічка не відображається в Internet Explorer 7. Дякую за зауваження
Буду виправляти.
каже: 19.04.2008 о 18:52
Привіт.
Шось не достатньо коментарів в тих файлах шоб воно запрацювало.
Я користуюсь UAhosting.
Куди класти code.php?
Навіщо в index.php код на початку?
Як поставити GD?
каже: 19.04.2008 о 20:57
Привіт, Maksym. Давайте по порядку.
> Шось не достатньо коментарів в тих файлах шоб воно запрацювало.
А більша кількість коментарів до коду, на мою думку, буде недоцільна.
Що не зрозуміло питайте на цьому блозі
Не розумію, що у вас виникли за проблеми. Розархівовуєте архів і закачуєте файли на сервер, де є ваш сайт. Все має працювати. Якщо у вас на сервері вже є файл “index.php”, то дайте файлу з архіву іншу назву.
> Куди класти code.php?
Весь вміст архіву потрібно помістити в папку, де розміщений ваш сайт. Файл code.php також.
> Навіщо в index.php код на початку?
Для того, щоб відповісти на ваше запитання, мені потрібно для початку знати на якому рівні ви знайомі з PHP. І від цього відштовхуватись. Якщо коротко. Код спочатку генерує т.з. “секретний” текст, щоб помістити його в сесію. Плюс до цього там є перевірка на те, чи користувач правильно ввів “таємне” число.
> Як поставити GD?
Дана бібліотека у вас уже стоїть на сервері, якщо ви використовуєте хостинг від UAhosting. Тому тут проблем не буде.
каже: 19.04.2008 о 21:02
PHP я взагалі не знаю.
Знаю HTML та CSS (трохи).
У мене є форма на одній із HTML сторінок.
Ось і хочу її захистити.
Я так зрозумів шо мені потрібно
видерти із Вашого index.php код
для моєї форми.
каже: 20.04.2008 о 09:12
> Я так зрозумів шо мені потрібно видерти із Вашого index.php код для моєї форми.
Якщо по-простому, то якось так воно і є.
1. Той PHP-код, що є зверху у файлі з архіву (index.php) слід розмістити також десь зверху, але уже у вашому файлі з формою, яку слід захистити.
2. JavaScript-код розмістіть в тілі <head>, тобто між <head> і </head>. Для прикладу розміщення JavaScript-коду дивіться на файл з архіву (index.php).
3. Зрозуміло, що ваша форма має містити, як капча-малюнок, так і поле з іменем “secretcode” (дивіться на index.php).
4. Щоб PHP-код виконувався на сервері, файл з вашою формою має мати розширення не html чи htm, а php.
каже: 25.05.2008 о 18:01
Дійсно дуже оригінаьна каптча, вже пішов ставити)
каже: 25.05.2008 о 18:40
Де саме, якщо не секрет, ти плануєш ставити блакитно-жовту капчу?
каже: 31.05.2008 о 15:47
попробував в себе на блозі, проте зняв, шось ніяк вона під дизайн мого блогу не канає(
каже: 31.05.2008 о 17:44
Цікаво, як тобі вдалось інтегрувати даний скрипт на блозі під ВордПрес. Щось ти заливаєш
каже: 17.06.2008 о 23:18
Капча те що треба, розробник справжній патріот нашої країни, так тримати!
каже: 29.06.2010 о 20:58
Я ніяк не можу доїхати що саме мені потрібно в свій файл index.php витягнути з вашого файлу, щоб в мене появлялася картинка і йшла перевірка тексту, який написаний на ній… :(((