GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Проверка e-mail адреса на существование(32321)
Строим календарь для сайта на Perl(11770)
Web Основы с LWP(11413)
Построение крупно-масштабного e-commerce сайта на Apache и mod_perl(11239)
Image::Magick или фотошоп для perl(9663)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » Perl » Введите число, изображенное на картинке

Введите число, изображенное на картинке


Владимир Максименко
4raznoe@mail.ru

В статье описан метод защиты от автоматического заполнения и отправки формы с сайта путем динамической генерации картинки с кодом и подтверждения правильности ввода.

Как это работает
Когда происходит заполнения полей с данными, система просит пользователя указать код, который он видит на картинке.

После проверки правильности ввода происходит решение - пускать клиента в систему или нет.

Большой плюс такого метода - надежность. "Вскрыть" картинку и найти в ней цифры не так-то просто, потому что здесь придется писать сложный анализатор изображения.

Алгоритм работы

  • генерируем случайное число с заданным количеством разрядов или слово из словаря (будет использоваться как надпись на картинке) - пароль
  • создаем случайный код сессии
  • во временном каталоге создаем файл с именем сессии, внутри содержится сгенерированный пароль
  • не забываем удалять старые файлы сессий, время жизни которых истекло - неудачные попытки авторизации
  • в заполняемой пользователем форме вставляем hidden поле с кодом сессии и поле ввода пароля
  • генерируем и показываем на странице подготовленную картинку с паролем (делаем ее трудночитаемой для возможных анализаторов, но понятной человеку)
  • после отправки заполненной формы сравниваем содержимое файла сессии с введенным паролем, если значения совпадают - значит форму заполняет человек, вносим данные
  • удаляем файл завершившейся сессии

Замечания по реализации
Сначала была мысль не использовать файлы сессий, а передавать в форме в 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.

Уникальная строка для шифрования - текущее время в 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.

Слово пароля посимвольно выводим на изображение, каждая буква отображается со случайным сдвигом по горизонтали и вертикали, а также вращением.

После этого "зашумляем" изображение - сверху в случайных местах разбрасываем разноцветные точки.

Можно еще добавить вывод букв разными шрифтами и цветами, а также использовать разноцветный фон (например, кусочки фотографий).

Исходники модуля можно взять по адресу voldemar.info/files/anti_robot_img.pm.

Система успешно применяется на сайте "ПРАЙСЫ online" в разделе "Доска объявлений".

 
24.09.2004
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.