Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
"Введите число, изображенное на картинке"В статье описан метод защиты от автоматического заполнения и отправки формы с сайта путем динамической генерации картинки с кодом и подтверждения правильности ввода. Как это работаетКогда происходит заполнения полей с данными, система просит пользователя указать код, который он видит на картинке. После проверки правильности ввода происходит решение - пускать клиента в систему или нет. Большой плюс такого метода - надежность. "Вскрыть" картинку и найти в ней цифры не так-то просто, потому что здесь придется писать сложный анализатор изображения. Алгоритм работы
Замечания по реализацииСначала была мысль не использовать файлы сессий, а передавать в форме в hidden поле зашифрованный по MD5 пароль или обойтись просто созданием временных файлов с именами-значениями пароля, и проверять только их наличие. Но решил все же делать с запасом надежности. Случайный пароль для картинки$kol_digit=5; @pass_chars=(0..9); srand(); $password=join("", @pass_chars[map {rand @pass_chars}(1..$kol_digit)]); Не забываем раскручивать генератор случайных чисел. В примере пароль создается исключительно из цифр, но для повышения безопасности можно добавить и буквы @pass_chars=("A".."Z", "a".."z", 0..9, qw(% ! $ % ^ & *)); Также можно использовать слова и куски текста из словаря. Шифрованный код сессииИспользуется модуль Perl Digest::MD5 (http://search.cpan.org/dist/Digest-MD5/) Уникальная строка для шифрования - текущее время в raw-формате, а также процесс скрипта. $salt=Digest::MD5->new; $hash = $salt->add(time().$$); # шифруем методом ASCII-HEX $session_code=$hash->hexdigest; Подготовленная картинка с паролемКартинка отображается на странице как STDOUT работы небольшого скрипта, генерирующего картинку, код сессии передаем скрипту как параметр <img align="right" src="/cgi-bin/anti_robot_img.cgi?code=<session_code>" border=1 alt=""> Если параметр не задан - генерируется картинка со случаным паролем. Для создания и вывода картинки используется модуль Image::Magick (http://www.imagemagick.org/) Слово пароля посимвольно выводим на изображение, каждая буква отображается со случайным сдвигом по горизонтали и вертикали, а также вращением. После этого "зашумляем" изображение - сверху в случайных местах разбрасываем разноцветные точки. Можно еще добавить вывод букв разными шрифтами и цветами, а также использовать разноцветный фон (например кусочки фотографий) Исходники модуля можно взять по адресу http://voldemar.info/files/anti_robot_img.pm Система успешно применяется на сайте "ПРАЙСЫ online" в разделе "Доска объявлений" http://www.price-list.kiev.ua/cgi-bin/msg_board.cgi?do=add-msg |
Форум Программиста
Новости Обзоры Магазин Программиста Каталог ссылок Поиск Добавить файл Обратная связь Рейтинги
|