Forum Webscript.Ru

Программирование => Perl => Тема начата: Hatchet от 27 Ноября 2003, 16:56:22

Название: Динамическая картинка
Отправлено: Hatchet от 27 Ноября 2003, 16:56:22
Прочел статейку по защите сайта от перебора паролей средством динамичесой картинки с номером...
используется модул GD.pm

решил реализовать:

Скрипт пишет фому с предварительным
Content-type:text/html\\n\\n
....

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

Content-type:image/jpeg\\n\\n

Кароче картинка не кажется :(
Вместо нее казяблики...

Как поступить!
Название: Динамическая картинка
Отправлено: Phoinix от 27 Ноября 2003, 17:19:24
Hatchet
Я бы посоветовал, форму выводить статично, а скрипт выводящий картинку вставить через SSI, вот только может возникнуть трабла с передачей данных (как раз таки пароля) из этого скрипта в другой, все зависит от реализации всего остального...
Название: Динамическая картинка
Отправлено: Billi от 27 Ноября 2003, 17:34:28
Или с делать 2 скрипра, но одно точно скрип выводящий картинку дожен  вызыватся примерно так
Название: Динамическая картинка
Отправлено: Hatchet от 27 Ноября 2003, 17:36:31
К сожалению при вывводе картинки через SSI всеравно битовый вид...

конфликтуют Content-type-ы..

вероятно, тот что выше имеет приоритет и игнорируется следующий... а есть ли возможность отключить временно действие Content-type...

Или может попробовать сгенерированную картинку сохранить гденить п показать обычным способом а потом затереть?
Название: Динамическая картинка
Отправлено: Phoinix от 27 Ноября 2003, 17:40:01
Hatchet
Ой да... что-то я гнать вечером начал... SSI не прокатит... Billi
прав...
Останется только связь организовать...
Название: Динамическая картинка
Отправлено: Phoinix от 27 Ноября 2003, 17:42:19
Hatchet
Лучше не картинку генерить а как раз таки код, который второй скрипт подхватит, единственно, что при одновременном двойном запуске скриптов, код должен быть для каждого пользователя свой...
Название: Динамическая картинка
Отправлено: Hatchet от 27 Ноября 2003, 17:42:45
а блин как ее сохранить ? :)
чтоб она jpeg-ом была
Название: Динамическая картинка
Отправлено: Phoinix от 27 Ноября 2003, 17:54:39
Hatchet
Зачем её сохранять, если ты её покажешь всего один раз в её жизни?
Название: Динамическая картинка
Отправлено: Hatchet от 27 Ноября 2003, 17:56:53
Все сделал :))))

Уряяяя
Название: Динамическая картинка
Отправлено: Hatchet от 28 Ноября 2003, 21:54:51
Не для похвалы:

реализация такая:
use Digest::MD5;
use GD;

$datadir="/home/....";

print "Content-type: image/jpeg\\n\\n";

$image = new GD::Image(50,50);
$white = $image->colorAllocate(255,255,255);
$black = $image->colorAllocate(0,0,0);
$image->rectangle(0,0,50,50,$black);
$number=int rand 3333;
$image->fill(49,49,$black);
$image->string(gdGiantFont,5,15,"$number",$white);
binmode STDOUT;
#создаем имя файликов картинки и содержащий цифру    
$salt=Digest::MD5->new;
$string=time().$$;
$hash=$salt->add($string);
$id=$hash->hexdigest;

open(FILE,">$datadir/$id")||die;
print FILE $number;
close(FILE);

open(FILE,">$datadir/$id.jpg")||die;
print FILE $image->jpeg;
close(FILE);
#Показываем картинку и скрытое полу с id по которому можно сравнить введенный номер.
print "";
print "В нижеследующее поле введите номер, который Вы видите на картинке.";
print "";
print "Номер";

#Остально обрабатывает скрипт авторизации...

Толко не забудте затереть созданные файлы - папка разбухнет :)
Название: Динамическая картинка
Отправлено: Phoinix от 29 Ноября 2003, 13:29:48
И сразу несколько вопросов...

откуда ты берешь $id, и разное ли значение этой переменной для разных пользователей?
IMHO $number не нужно записывать в файл, лишнее действие, проще закриптовать его и предать в форме hidden, а потом при подтверждении формы параметр Number тоже криптуешь и сравниваешь...
Тем более ты передаешь $id через форму... мне остается только найти файл $datadir/$id с номером... а так как $datadir участвует и сохранении изображения, то вообще никаких проблем... Тем более не вздумай передавать $id без проверки...
Название: Динамическая картинка
Отправлено: Hatchet от 05 Декабря 2003, 00:27:13
В статье журнала было рекомендовано не передавать id в поле hidden... якобы можно написать парсер чтоб его извлекать %)

да... придется немного изменить - например, файл с записаным $number надо положить в защищенную .htaccess папку.
Название: Динамическая картинка
Отправлено: Phoinix от 05 Декабря 2003, 09:35:11
Hatchet
Чем тебе не нравится передача закриптованного $number в поле hidden?
Название: Динамическая картинка
Отправлено: Hatchet от 05 Декабря 2003, 20:02:18
Я ж грю... в статье жернала Хакер было написано :)
Название: Динамическая картинка
Отправлено: Phoinix от 05 Декабря 2003, 20:42:47
Hatchet
Что написано? что $id передавать нельзя???
А причем тут закриптованный $number??? И что он может тебе дать для взома???
Название: Динамическая картинка
Отправлено: Hatchet от 05 Декабря 2003, 22:30:06
$number не закриптован!

он записан в файле с именем $id
Название: Динамическая картинка
Отправлено: Phoinix от 06 Декабря 2003, 11:22:57
Цитировать
$number не закриптован!
он записан в файле с именем $id

Ты знаешь... я как бы в курсе...

Цитировать
$number не нужно записывать в файл, лишнее действие, проще закриптовать его и предать в форме hidden, а потом при подтверждении формы параметр Number тоже криптуешь и сравниваешь...