Защита от роботов.

  • Автор темы Путник
  • Дата начала

Путник

Guest
Защита от роботов.

Где можно почитать об этом?

Защита от роботов – эта генерируемая картинка с числом, которое надо ввести в поле. Если число правильно введено, то пользователь проходит на страницу, иначе ошибка.
 

tristram

Guest
тут писать надо а не читать. делаешь что-то типа сессии: при заходе на целевую страничку на стороне сервера создаешь файл со случайным названием, туда записываешь правильный ответ с картинки, и это случайное название передаешь пользователю в cookie или например в hidden-поле формы. а в форме делаешь <img src="image.php?rnd=<случайный_код>">, image.php в свою очередь читает файл с правильным кодом и пишет его на картинке (об этом ниже). Пользователь смотрит на картинку и вводит в input text то что он увидел и жмет ок, далее скрипт смотрит всё тот же многострадальный файл с правильным ответом и справнивает значения.

Вот пример генерации картинки:
PHP:
function buildgfx($text="")
{
 header ("Content-type: image/png"); 
 $im = imagecreate(101, 26);
 $w = imagecolorallocate($im, 255, 255, 255);
 $g1 = imagecolorallocate($im, 192, 192, 192);
 $g2 = imagecolorallocate($im, 64,64,64);
 $cl1 = imagecolorallocate($im,rand(0,128),rand(0,128),rand(0,128));
 $cl2 = imagecolorallocate($im,rand(0,128),rand(0,128),rand(0,128));
 $cl3 = imagecolorallocate($im,rand(0,128),rand(0,128),rand(0,128));
 $cl4 = imagecolorallocate($im,rand(0,128),rand(0,128),rand(0,128));
 for ($i=0;$i<=100;$i+=5) {imageline($im,$i,0,$i,25,$g1);}
 for ($i=0;$i<=25;$i+=5) {imageline($im,0,$i,100,$i,$g1);}
 for ($i=0;$i<2;$i++) {imageline($im,rand(0,100),rand(0,25),rand(0,100),rand(0,25),$g2);}
 imagestring($im, 5, 0+rand(0,10), 5+rand(-5,5), substr($text,0,1), $cl1);
 imagestring($im, 5, 25+rand(-10,10), 5+rand(-5,5), substr($text,1,1), $cl2);
 imagestring($im, 5, 50+rand(-10,10), 5+rand(-5,5), substr($text,2,1), $cl3);
 imagestring($im, 5, 75+rand(-10,10), 5+rand(-5,5), substr($text,3,1), $cl4);
 for ($i=0;$i<5;$i++) {imageline($im,rand(0,100),rand(0,25),rand(0,100),rand(0,25),$g2);}
 $k = 1.7;
 $im1 = imagecreatetruecolor(101*$k,26*$k);
 imagecopyresized($im1, $im, 0, 0, 0, 0, 101*$k, 26*$k, 101, 26); 
 $im2 = imagecreatetruecolor(101,26);
 imagecopyresampled($im2, $im1, 0, 0, 0, 0, 101, 26, 101*$k, 26*$k);
 imagepng($im2);
 imagedestroy($im2);
 imagedestroy($im1);
 imagedestroy($im);
}
$text = "12345";
buildgfx($text);
Админы, не удаляйте мессагу за то что длинный код т.к. он в топик.

-~{}~ 06.08.05 10:22:

P.S. ах, да, я еще про escape-коды забыл (C) шматрица
 

Лисю

Guest
и это случайное название передаешь пользователю в cookie или например в hidden-поле формы
hidden-поле не есть гуд всё ж имхо. hidden поле можно сканировать роботом. Отсюда делайте выводы.

Достаточно в сессию писать уникальное число, что сгенерированно на избражении и при POSTе сравнивать что пришло от пользователя и что лежит в сессии.
 

SiMM

Новичок
> hidden-поле не есть гуд всё ж имхо
Зависит от реализации. Никто же не говорил, что значение в hidden-поле должно однозначно соответствовать тексту, предназначенному для ввода. Использовать для этого сессии - можно - но не всегда оправдано (на странице масса других ссылок, и в цеплянии к ним SIDа может не быть необходимости). Иногда может быть достаточно вносить в базу пару значений hidden_value real_value, удаляя их после подтверждения или по таймауту.
 

tristram

Guest
Лисю
какие выводы? делаю вывод что ты не знаешь тему.
ну робот найдет значение, увидит картинку, без знания того что написано на картинке он всё равно не пройдет. например в icq.com/password сделано картинкой и hidden'ом. флаг в руки, я тебе памятник поставлю если обойдешь без анализа картинки.
 

Лисю

Guest
ну робот найдет значение, увидит картинку, без знания того что написано на картинке он всё равно не пройдет.
1. роботы - это миф на 99%. никто не будет писать робота специально под ваш сайт, хотя бы потому, что никому не нужно просто так регестрироваться навашем сайте.
2. я имел в виду совершенно другую реализацию. я проще делаю - я генерирую мд5, обрезаю его до 5 симвролов, вывожу на картинке значение и кидаю в сессию. Если при посте то, что ввёл юзер совпас с тем, что в сессии - всё ок. Извиняюсь. Мы о разном просто говорили.
 

tristram

Guest
Лисю
1. ну почему миф? я сам парочку писал для форумов.
2. у меня на сайте сделано точно также, но я еще в сессии делаю случайный код чтоб одновременно один клиент мог вводить сколько угодно кодов и не получалась путаница (а также с кешом броузера).
 

Лисю

Guest
про 2 пункт не понял. можно поподробнее?
 
Сверху