Практическое применение кода подтверждения с картинки
В настоящее время множество хороших сайтов страдает от огромного потока рекламных объявлений или просто спама, который не добросовестные пользователи интернета пытаются расположить везде, где только это возможно: в гостевых книгах, форумах, каталогах и везде, где только можно оставить пару строк своего текста.
Основным методом борьбы с явлением такого вида спама является создание всевозможных проверок на человечность, т.е. определения, кто вводил данные в форму, человек или программа. К таким проверкам можно отнести:
- просьбу ввести в текстовое поле номер или слово с картинки
- ввести ответ на загадку или какой-либо вопрос
- нажать одну из нескольких кнопок (<input type="button">)
- выбрать один из нескольких правильных ответов (<input type="radio" >)
- выбрать несколько ответов (<input type="checkbox">)
- …
Несмотря на столь значительный список методов борьбы со спамом, применяют обычно только первый пункт, т.е. используют изображение с текстом или цифрами.
Алгоритм сверки данных в этом случае осуществляется несколькими способами:
Нами будет рассмотрен самый простой способ борьбы со спамерами, т.е. цифровой код нанесенный на картинку, состоящий из перемешанной текущей даты. Такой код подтверждения будет действителен менее десяти минут, с момента его генерации. Он будет нанесен на картинку, причем каждый раз код будет разный, в разных местах картинки, под разным углом, на разном фоне и написан различными шрифтами. Для начала определимся, что именно мы будем использовать из даты, предлагаю использовать текущие: день недели, месяц, число, час, минуты (первую цифру) и день в году. На мой взгляд, это, неприступная защита для простых программ-регистраторов или их авторов, т.к. точно определить какие значения из даты используются для генерации кода подтверждения практически невозможно. Но если вам и этого окажется мало, то можно перемножить или сложить все значения, или для каждого дня недели использовать свой алгоритм вычисления, все зависит только от вашей фантазии.
И так, начнем писать наш php-код, а то я уж слишком сильно углубился в теоретическую часть вопроса. Создаем новый php-файл и для начала напишем в нем функцию, которая будет "придумывать" код подтверждения из текущей даты, выглядеть она будет примерно так:
function generate_code ()
Теперь, когда у нас уже готова функция для генерации цифрового кода подтверждения, можно написать функцию для генерации этого кода на изображении взятом из файла, а затем вывод получившейся картинки с кодом подтверждения в браузер. Выглядит эта функция так:
function img_code ()
Для того, что бы все работало, в начале php-скрипта пишем:
define ( " code_dir " , " my_codegen /" );
Затем создаете папку my_codegen в той директории, в которой расположен php-скрипт – генератор изображений с кодом подтверждения, и создаете codegen.png и codegen0.png в Photoshope или другом графическом редакторе, копируете туда шрифты TrueType с именами Kiloton.ttf и 04B_24__.TTF. Все на этом генератор картинок завершен.
Теперь нам нужна функция для проверки введенных данных, она будет реализована по тому же принципу что и generate_code, ее нужно поместить в отдельный php -скрипт, который будет осуществлять проверку введенных данных:
function chec_code ($code)
В этот же файл, в конец добавьте функцию generate_code()
И в заключении примерная схема реализации:
if ( isset ($_GET[ 'code' ])) ?>