PHP Manual
/
Алгоритми

Як працює Captcha (описова картинка)

22. 08. 2019

Captcha наразі є одним з найпоширеніших способів захисту вільних форматів. Спочатку він був створений не для захисту безпеки даних, а для захисту від спаму і розпізнавання того, що це людина.

Однак вона генерується машиною, тому не завжди є ідеальною, але рівень успішності перевірки капчі становить близько 99%, і лише 1% зображень може бути розшифрований добре зробленим спам-роботом.

Як це працює

Є й інші варіанти, я, наприклад, використовую таке рішення:

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

Правильна транскрипція

Якщо тест на розгадування капчі вдається розгадати, то користувач, ймовірно, є людиною. Але варто подумати про користувачів, які не можуть вирішити завдання, особливо незрячих. Хорошим рішенням є об'єднання декількох можливих тестів (особливо попередньої вибірки голосу). Однак розпізнавання голосу машиною наразі значно ефективніше, ніж зчитування з зображення. Тому таке рішення не завжди є ідеальним.

Користувацьке просте зображення капчі

Досить часто достатньо згенерувати порожнє зображення певних розмірів і вписати в нього кілька символів розбірливо, без подальшого редагування. Серйозно! Більшість спам-ботів дурні і не можуть атакувати загальні форми з таким типом захисту, навіть якщо це ідеально читабельний текст, який краще розпізнає OCR.

Отримане зображення може мати такий вигляд:

<img src="captcha.php" alt="ukázková captcha">

Спробуйте оновити сторінку кілька разів, і ви побачите, що код щоразу змінюється випадковим чином. У демонстраційних цілях він просто генерується без збереження, тому видаляється одразу після завантаження.

Вихідний код я вирішив за допомогою бібліотеки PHPGD, яка є практично на кожній інсталяції PHP і хостингу:

Header("Тип контенту: image/png");
$obr = ImageCreate(100, 35);
$pozadi = ImageColorAllocate ($obr, 219, 28, 49); //визначення кольору фону
$bila = ImageColorAllocate ($obr, 255, 255, 255); //визначення білого кольору для тексту
$styl = array ($pozadi);
ImageSetStyle ($obr, $styl);
$nahodne_cislo = rand(11111,99999); //витягування випадкового числа довжиною 5 символів
imagestring($obr, 5, 25, 10, $nahodne_cislo, $bila); //функція для виводу тексту (у даному випадку числа)
ImagePNG($obr); //генерація зображення в пам'ять та рендеринг
ImageDestroy($obr); //видалити образ з пам'яті (він більше не знадобиться, тому що генерується один раз)

Відтворення зображення - це лише питання HTML:

<img src="captcha.php">

Звертаємо увагу, що даний скрипт не функціонує самостійно без додаткової модифікації. Він слугує лише демонстрацією для створення простого образу.

Резюме

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

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

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
Status:
All systems normal.
2024