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:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | uk