php, web-разработка Автор: Роман Голубовский
Теги: captcha, HTML, php, web-разработка, безопасность, защита
Оказывается, далеко не все знают, что такое captcha Мой знакомый недавно меня спросил, для чего на сайтах, – особенно когда что-то надо скачать или опубликовать комментарий, необходимо ввести цифры с картинки, которые к тому же так плохо видно. Поэтому ликвидация безграмотности – сейчас попытаюсь объяснить, что значит картинка с цифрами, и дальше расскажу, как сделать captcha с помощью PHP. Кто теоретически готов – может переходить сразу к технической части.
Итак, согласно википедии, CAPTCHA (англ. completely automated public Turing test to tell computers and humans apart "- полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей) – торговая марка Университета Карнеги-Меллона, компьютерный тест, который используется для того, чтобы определить, кто использует систему – человек или компьютер. Термин появился в 2000 году.
В большинстве случаев captcha – это такая небольшая картинка с набором букв и цифр, которые нужно ввести в поле ввода, расположенного рядом. При правильном вводе происходит определенное действие (например скачивание файла или публикация комментариев), при неправильном – предлагается ввести циферки еще раз. Это делается для того, чтобы убедиться, что циферки вводит именно человек а не зла компьютерная программа, спам-бот. Цифры трудно прочитать – это делается специально для того, чтобы и компьютерные программе было труднее просканировать цифры на картинке. Всего капчи не ограничиваются лишь картинками. Встречаются captcha в виде загадок, просьб дополнить фразу или легкие арифметические задачи (1 + 2 = *) – задачи, которые обычно без малейших проблем решаются обычными людьми, зато не решаются не подготовленными специально для этого программами. Например, разве трудно дополнить такое (ввести то, что должно быть на месте трех точек):
"Столица Сомали …"
Шучу. Это должно быть нечто действительно легкое, такое, как, например, "Д'Артаньян и … мушкетера". (Кому все же интересно, столица Сомали – Могадишо:)
Но мы сейчас рассматриваем капчу в ее классическом виде, то есть как рисунок. Поэтому приступим к созданию captcha с помощью PHP.
Сначала скрипт который генерирует рисунок с циферки (captcha.php):
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <? Php / / указываем браузеру в хедерах что наш рисунок не нужно кэшировать Header ("Pragma: no-cache"); / / Снова в хедерах указываем, что мы выводим именно фотография Header ("Content-type: image / jpeg) ; / / Берем рисунок для бэкграунд $ pic = ImageCreateFromjpeg ("captcha.jpg"); / / Указываем цвет наших циферок $ color = ImageColorAllocate ($ pic, 249, 207, 180); / / Берем произвольный код, который и выведет на рисунке (в нашем случае 4 цифры) $ code =''; for ($ i = 0; $ i <4; $ i + +) ($ code .= rand (0, 9);) / / Ну и наконец рисуем фотография ImageString ($ pic, 6, 23, 13, $ code, $ color); Imagejpeg ($ pic); ImageDestroy ($ pic);?> |
Теперь вызывает этот скрипт как обычный рисунок, который вставляет в нашу ХТМЛ-страницу:
| 1 2 3 4 5 6 7 8 | <html> <head> <title> Captcha </ title> </ head> <body> <img src="captcha.php" /> </ body> </ html> |
Врезультати на странице появляется фотография с произвольными цифрами, изменяются при каждой загрузке страницы:

Ну вот, основная часть, которая показывает как именно сделать captcha-фотография, сделанная. Теперь осталось показать пример употребления. Для этого мы немножко изменения файла captcha.php и создадим файл captcha_test.php для примера работы капчи.
captcha.php:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <? Php / / Открываем сессию - потребуется для передачи цифр в скрипт для проверки session_start (); / / далее все как было Header ("Pragma: no-cache"); Header ("Content-type: image / jpeg) ; $ pic = ImageCreateFromjpeg ("captcha.jpg"); $ color = ImageColorAllocate ($ pic, 249, 207, 180); $ code =''; for ($ i = 0; $ i <4; $ i + +) ( $ code .= rand (0, 9);) ImageString ($ pic, 6, 23, 13, $ code, $ color); Imagejpeg ($ pic); ImageDestroy ($ pic); / / Код записываем в переменную сессии $ _SESSION ['submit_code'] = $ code;?> |
Мы модифицировали файл captcha.php таким образом, чтобы он помимо вывода рисунка еще и записывал в переменную сессии цифры, показываемые на рисунке. Именно с переменной сессии будут сравниваться введенные пользователем данные. Это достаточно безопасный метод, ведь доступ к переменным сессии имеют лишь наши скрипты. Идем дальше. Файл captcha_test.php будет выводить рисунок капчи, поле для ввода цифр, текст с прозьбою это сделать и кнопку сабмита. При нажатии на кнопку скрипт проверяет, введены цифры аналогичны тем
, которые сохранены файлом капчи в переменной сессии. Если цифры совпадают - выводится приветствие, если нет - сообщение об ошибке и просьба попробовать еще. Меньше слов, дивимся:
Captcha_test.php:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <? Php / / Не забывает открыть сессию, иначе ничего не получится session_start ();?> <html> <head> <title> Captcha </ title> </ head> <body> <? Php / / если данные из формы переданы if (isset ($ _POST ['code'])) (/ / если введенные данные аналогичные с сохраненными в сессии - вывод сообщения с приветствием if (isset ($ _SESSION ['submit_code']) & & ($ _SESSION ['submit_code' ] == $ _POST ['code'])) (echo 'Поздравляю! Код введен правильно ';) / / иначе вывод сообщения об ошибке else (echo' Код введен неверно. <a href=""> Повторите </ a> ';)) else (/ / рисунок с цифрами и форма для ввода цифр?> <img src="captcha.php"> <br /> Введите пожалуйста цифры с картинки: <form action="" method="POST"> <input type="text" name="code" /> <br /> <input type="submit" value="Ok" /> </ form > <? php)?> </ body> </ html> |
При запуске в браузере нашего скрипта все будет выглядеть примерно так:

Как видите, ничего сложного нет. Вот и все, теперь мы знаем как создавать captcha на php. Успехов в освоении интернет-технологий!
Похожие статьи
-
No related posts
Комментариев пока нет.
Комментарии RSS Адрес для трекбека
Ваш отзыв

Отзывов нет