Обсуждение статьи тематического каталога: Реализация теста Тьюринга на Perl (ввод цифр изображенных на картинке) (perl image auth web cgi)Ссылка на текст статьи: http://www.opennet.me/base/dev/turing_test.txt.html
У тебя в урле картинки прямым текстом указано число, которое изображено ... не хорошо
От этого избавиться можно.
А так в принципе очень даже ничего.
Немного подшлифовать, заменить gif на png и рабочий package готов.
однако действительно дыра получается. Роботу совершенно незачем анализировать картинку. Проще взять и вынуть число из URL. Ведь они у тебя довольно простого вида
http://www.price-list.kiev.ua/cgi-bin/anti_robot_img.cgi?cod....Соответственно кусочек после code и есть число. :)
Упс !действительно ошибся с кодом сессии
исходник исправилнужно читать так
Картинка отображается на странице как STDOUT работы небольшого скрипта, генерирующего картинку, код сессии передаем скрипту как параметр
<img align="right" src="/cgi-bin/anti_robot_img.cgi?code=<session_code>" border=1 alt="">
Perl конечно хороший язык, но PHP рулит
----------------------------------------
header("Content-type: image/png");
session_start();
//Config
$font = 4; //Largest built-in font
$width = 100; //Image width
$height = 35; //Image height
$num = 255; //Number of random background lines$minc = 4; //Minimum word length
$maxc = 8; //Maximum word length// seed with microseconds
function make_seed()
{
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}mt_srand(make_seed());
$len=mt_rand($minc,$maxc);
$string="";
for($i=0;$i<$len;$i++)
{
if(mt_rand(0,1))
$c=mt_rand(65,90);
else
$c=mt_rand(97,122);
$string.=chr($c);
}$_SESSION['word_verify']=$string;
/*********************************************************/
$im = imagecreatetruecolor($width,$height);
$tcolor = imagecolorallocate($im, 0, 0, 0);
$bcolor = imagecolorallocate($im, 255, 255, 255);$fx = imagefontwidth($font);
$fy = imagefontheight($font);$x=mt_rand(2,$width-$fx*strlen($string)-2);
$y=mt_rand(2,$height-$fy-2);imagefill($im, 1, 1, $bcolor);
imagerectangle( $im, 0, 0, $width-1, $height-1, $tcolor);//Drawing random lines
for($i=0;$i<$num;$i++)
{
$tx = mt_rand(0,$width);
$ty = mt_rand(0,$height);$dx = mt_rand(mt_rand(-3,0),mt_rand(0,3));
$dy = mt_rand(mt_rand(-3,0),mt_rand(0,3));imageline($im,$tx,$ty,$tx+$dx,$ty+$dy,$tcolor);
}//cleaning box for text
imagefilledrectangle( $im, $x-1, $y-1, $x+$fx*strlen($string)+1, $y+$fy+1, $tcolor);
imagefilledrectangle( $im, $x-1, $y-1, $x+$fx*strlen($string)+1, $y+$fy+1, $bcolor);//Writing text
imagestring($im, $font, $x, $y, $string, $tcolor);
imagestring($im, $font, $x+1, $y, $string, $tcolor);imagerectangle( $im, 0, 0, $width-1, $height-1, $tcolor);
imagepng($im);
imagedestroy($im);
У меня при заходе на сайт генерятся хитрые code, которые ничего не дадут при анализе.Да и зайдя на http://www.price-list.kiev.ua/cgi-bin/anti_robot_img.cgi?cod... тоже получил не 53191.
Можно и картинки обойти, если очень захотеть ;)
На /. как-то пробегало, открываем какой-нить порно ресурс и за показ фришного контента требуем от юзеров распознать _вашу_ картинку...
Скажите, а зачем картинку выводят в PNG ?
Потому что это стандарт де-факто для опенсурсного ПО. JPEG'и, BMP и прочие GIF'ы не подходят по лицензионным соображениям.
Хороший модуль, только на мой взгляд несколько сыроват: есть лишние подпрограммы, да и удалять старые файлы сессий лучше не при начале новой (ибо при частом обращении есть шанс, что кто то начнет новую еще до того как будет обработан преведущий запрос), а в подпрограмме проверки - если есть такая сессия, но код неправильный - удалить файл сессии
И возможно следует объединить в одну подпрограмму создание новой сессии и генерации картинки
Но это только мое мнение, глубоко модуль не копал, только посмотрел
Тоже по теме можете посмотреть
http://www.progland.com/protect_forms.htm
Что за шняга дайте готовый скрипт накой нам это ?? выложите сам скрипт как он должен вызывать модуль а то я ламер и и не тока я незнаем как чё делать !
>Что за шняга дайте готовый скрипт накой нам это ?? выложите сам
>скрипт как он должен вызывать модуль а то я ламер и
>и не тока я незнаем как чё делать !Учиться
Друзья, помогите ламеру разобраться что к чему.
Что и куда нужно поместить что-бы это все заработало...
Есть сервер, на нем стоит Perl, и сайт на котором есть заполняемая форма.
Что нужно написать в htm файле? И какие куда скрипты поместить? Спасибо!!!
Жалко, что на последнее сообшение по установке так никто и не ответил.
да жалко но можно покапаться и найти самому что куда вставлять, так и сказано выше УЧИТЬ :)
на РНР проще организовать... и в JPEG можно, и в PNG и даже в файл - а потом этот файл читать.
а зачем сохранять данные в файл? можно ведь сохранять в сессию, а код сессии - в куки пользователю.
У меня неболшая проблемка по работе указанного модуля.
У меня не получается сходу картинку выводить в форму приходится сохранять на сервере, а src= выводить её местоположение.
Нельзя как нить выводить в браузер без создания файла?
Господа... Вешался на Annotate? покопал форумы - нарыл что параметр gravity - обязательный... воткнул, вешацца перестало, но в картинку текст не пихает, выдает только фон и шум.
Шрифт видит - проверено.
Куда копать?ЗЫЖ: Неплохо бы в статью добавить несколько строк про Контент-тайп, а то ведь у слабодумающих набор символов будет выдавать ;о)
Нужно прописать путь до шрифта font=>'путь.../шрифт.ttf'