Защита формы картинкой с кодом без исп. сессий
Можно ли сделать защиту от автоматического заполнения форм с помощью картинки с изображением (GD) не используя сессии? Помогите, никак не могу найти, везде только через сессии...
ессно это плохой вариант... поэтому можно использовать библиотеки обратимого шифрования... пихать в хидден зашифрованную строку, ключ шифрования хранится у тебя в скрипте, получаешь хидден-поле и введённый юзером код, расшифровываешь и сравниваешь... с пользователями никаких проблем не возникнет, а всякие программы вряд ли будут пытаться побдирать ключ и расшифровывать код))
http://ru2.php.net/manual/ru/ref.mcrypt.php
Код:
<?php
//img.php
header("Content-type: image/png");
srand( ((int)((double)microtime()*1000003)) );
//... генерирую последовательность символов $str, код
imagettftext($img_handle, 18, 0, 20,23,$color,"dragon.ttf",$str);
ImagePng ($img_handle);
ImageDestroy ($img_handle);
?>
//img.php
header("Content-type: image/png");
srand( ((int)((double)microtime()*1000003)) );
//... генерирую последовательность символов $str, код
imagettftext($img_handle, 18, 0, 20,23,$color,"dragon.ttf",$str);
ImagePng ($img_handle);
ImageDestroy ($img_handle);
?>
я его подключаю в форме
<img src='img.php' />
Как мне узнать сгенерированное значение $str или как передать в img.php (делать как-нибудь так - img.php?id=12345, можно ли обойтись без шифрования)? Или я не так делаю? В тех статьях, которые я нашел значение получалось через сессионную переменную
При генирации картинки вставляешь этот код в БД, ид записи засовываешь в хайден. При проверке по ид вытаскиваешь запись и уделяешь её. Всё.
если без бд... в твоём коде - пихаешь в hidden твой $str (или какую-то функцию шифровки от него), получаешь после отправки формы 2 поля - одно код, что ввёл юзер, другое - хидден.. .если они равны то введено верно... шифрование для того чтобы юзер или робот не подсмотрел твой хидден...
но есть один минус... если юзер как-то получит ключ, которым ты шифруешь, то он просто введёт и в хидден и в поле для кода с рисунка валидные коды с твоим ключём... но нормальный ключ подобрать довольно сложно))
з.ы. а вообще это не надо... не угодили сессии - используй бд как shaelf написал... хотя спорный вопрос что будет быстрее работать - 2 дёрганья бд или 2 функции шифрования...
Цитата: Mr.Hacker
банальный способ проверки... в какое-то hidden-поле формы пихается код с рисунка... соответственно при получении формы если поля хидден и поле введённого кода с рисунка совпадают, то введено правильно)
ессно это плохой вариант... поэтому можно использовать библиотеки обратимого шифрования... пихать в хидден зашифрованную строку, ключ шифрования хранится у тебя в скрипте, получаешь хидден-поле и введённый юзером код, расшифровываешь и сравниваешь... с пользователями никаких проблем не возникнет, а всякие программы вряд ли будут пытаться побдирать ключ и расшифровывать код))
http://ru2.php.net/manual/ru/ref.mcrypt.php
ессно это плохой вариант... поэтому можно использовать библиотеки обратимого шифрования... пихать в хидден зашифрованную строку, ключ шифрования хранится у тебя в скрипте, получаешь хидден-поле и введённый юзером код, расшифровываешь и сравниваешь... с пользователями никаких проблем не возникнет, а всякие программы вряд ли будут пытаться побдирать ключ и расшифровывать код))
http://ru2.php.net/manual/ru/ref.mcrypt.php
Не катит. Программой отправляем запрос (ну например автозаполнитель форм), и в заголовке просто указываем одинаковое значение "как бы введенего числа с картинки" и значения поля hidden. Все. Система поломана)))
Тоже самое можно сделать с записями в БД и уникальными ключами.
Вобщем для этого и придумали умные люди сессии чтоб так не извращаться.
Сесии не всегда подходят. Например ситуация такая, отключены куки и нехочется урлу поганить.
Цитата:
Не катит. Программой отправляем запрос (ну например автозаполнитель форм), и в заголовке просто указываем одинаковое значение "как бы введенего числа с картинки" и значения поля hidden. Все. Система поломана)))
не сломана) откуда ты знаешь по какому методу генерится hidden? (если не писать в него сам код картинки, а писать какую-то функцию от него, без разницы обратимую или нет).. ты же не знаешь как именно был зашифрован код...
Mr.Hacker, ну да. Я забыл про шифорвание=)