Багато хто з вас бачили, що в гостьових книгах, форумах, при реєстрації нових користувачів у формах використовується захист від роботів — кривенькие буковки і циферки. Цей вид захисту називається captcha. Ось, що з цього приводу сказано в Вікіпедії:

CAPTCHA (англійська абревіатура від «Completely Automated Public Turing test to tell Computers and Humans Apart»…) — … комп’ютерний тест, який використовується для того, щоб визначити, чи людина використовує систему… CAPTCHA найчастіше використовується при необхідності запобігти використання інтернет-сервісів ботами, зокрема, для запобігання автоматичної реєстрації, скачування файлів, масових розсилок і т. п.

Я сам використовував цей захист на своїх сайтах. Однак, як-то мені попалася посилання на ресурс спамерів, де наведено близько 20 видів captcha, що їх програма може розпізнати. По ідеї все просто — достатньо згадати програми розпізнавання тексту для сканерів. Контур літери А, як її не коверкай, все одно принципово не змінюються, інакше людина, що пише повідомлення в гостьову, теж не зможе її впізнати.

Думка про створення чогось такого, що людина зможе легко розпізнати, а робот ніколи, міцно засіла в голові. Першим прийшов у голову приклад, прочитаний колись давно в книзі, присвяченій штучного інтелекту: як пояснити машині різницю між кішкою і собакою. Людині достатньо одного погляду, а спробуйте хоча б розповісти, у чому відмінності…

Розпізнавання образів — ось у чому комп’ютер ще не скоро зрівняється з людиною. Звідси і виникла ідея, яку зараз я пропоную вашій увазі.

Вибираємо кілька картинок (чим більше — тим краще), на який зображено різні об’єкти. Як в дитячих іграх — м’ячик, квітка, дерево, машина. Кожному зображенню ставимо у відповідність його назва (текстове). Тепер потрібно пред’явити відвідувачу сайту кілька картинок і поруч надрукувати назву однієї з них з проханням клікнути саме по ній. У цьому і є основний принцип цього захисту.

Зрозуміло, що робот може запам’ятати ваші картинки (адже їх не нескінченна кількість) або просто клікати в одну з них до тих пір, поки не вгадає — ймовірність попадання дуже велика. Тут починаються хитрощі.

По-перше, можна показувати не цілу картинку, а тільки її частина. Погодьтеся, якщо ви побачите рот, ніс або очі, то ви однозначно зрозумієте, що це особа. А для машини — це абсолютно різні картинки.

По-друге, поміщати наші фрагменти на якийсь фон, робити їх напівпрозорими, можливо навіть частково перекривати їх один одним. Головне, щоб людині все одно залишалося зрозуміло, куди треба клікати.

І, по-третє, можна просити клікнути не на одну картинку, а на кілька в певному порядку. Від цього ймовірність попадання роботом зменшується на порядки.

Ось приклад такої captcha. Я просив поклікати всіх своїх родичів, включаючи дітей. Практично помилок не було. Більш того, це виглядало як гра (що, до речі, може додатково залучити відвідувачів на ваш сайт).

Кілька слів про технічну сторону реалізації цієї програми — мною використаний PHP зі стандартної графічної бібліотеки і зовсім трошки Ajax. Якщо виникнуть труднощі з написанням такого скрипта — можу допомогти.

Буду радий почути ваші думки з приводу такого способу захисту веб-форм від роботів і спаму. Найбільш цікаві з них будуть обов’язково тут опубліковані.

Можливо, хто-небудь знає про подібні методи захисту — напишіть. Мої пошуки по Інтернету не увінчалися успіхом…

Також буду вдячний, якщо ви, скориставшись цією ідей, поставите посилання на дану статтю.