Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Программируемая... 65006
Invision Power ... 64190
Организация зап... 63510
Модуль Forms 60371
Создание отчето... 60354
ТЕХНОЛОГИИ ДОСТ... 56648
Пример работы с... 53764
Создание потоко... 52495
Имитационное мо... 52078
Реклама
Сейчас на сайте
Гостей: 14
На сайте нет зарегистрированных пользователей

Пользователей: 13,062
новичок: AndeR
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование системы управления качеством производственного процесса на...
База данных - словарь терминов на Delphi + Пояснительная записка
Поиск пути в графе заданном списками инцедентности на Turbo Pascal

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
"Введите число, изображенное на картинке"
Как это работает

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

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

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


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




  • генерируем случайное число с заданным количеством разрядов или слово из словаря (будет использоваться как надпись на картинке) - пароль
  • создаем случайный код сессии
  • во временном каталоге создаем файл с именем сессии, внутри содержится сгенерированный пароль
  • не забываем удалять старые файлы сессий, время жизни которых истекло - неудачные попытки авторизации
  • в заполняемой пользователем форме вставляем 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 (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

Опубликовал Kest October 31 2008 18:30:24 · 0 Комментариев · 7110 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Мод "проверочный ...
Borland Delphi 6....
ЯЗЫК ПРОГРАММИРОВ...
MiniTetris [Исход...
SendSMS для PHP-F...
База англоязычных...
Bitmap [для кнопок]
PBEditPack
DAlarm
Пример работы с р...
Delphi 2005 Секре...
около 291 статьи ...
DiZsubmit
Защита от спама ...
CarGame [Исходник...
PHP 5
Меню проводника в...
Книга по Delphi (...
Профессиональное ...
WebReg v1.3

Топ загрузок
Приложение Клие... 100371
Delphi 7 Enterp... 82759
Converter AMR<-... 20046
Borland C++Buil... 11140
GPSS World Stud... 10700
Borland Delphi ... 8084
Turbo Pascal fo... 6968
Visual Studio 2... 4963
Калькулятор [Ис... 4314
FreeSMS v1.3.1 3510
Случайные статьи
Об изображениях
Создание в среде D...
XHTML - переход к XML
Чтение структуры P...
Процедура просмотр...
Фотоаппарат: настр...
Система после упло...
Асбестоцементные т...
Играть в игровые а...
Поиск слева
База данных по сту...
6.1. Ввод новых ...
Если Windows Messe...
Заполнить квадрат NxN
Формирование запро...
Повышенная надежно...
Частные клиники Ка...
Датчики магнитного...
Выполнение процеду...
Вставка узла похож...
Функция GetSystemI...
Модель доступа к д...
Как работает TIFF
Свойства информаци...
Протокол РоЕР внут...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?