Как боты узнают код с картинки?

1.43K
.

Распознавание текста

.
Helltar (27.07.2013 / 17:48)
Saniok, сайт в студию.
Какой сайт?
.
lazyproger (27.07.2013 / 19:18)
Количество пикселей нельзя сравнивать с количеством пикселей в символе, шумами и прочим легко обмануть
Если бот пишется специально для твоего сайта, то ничего уже не поможет, разве капчу сделать не очень хорошо отображения
.
Helltar
Какой сайт?

Свой сайт с капчой. Хочу посмотреть кое-что.
.
Helltar (27.07.2013 / 21:33)
Свой сайт с капчой. Хочу посмотреть кое-что.
http://johncms.com/files/forum ... a.png Вот тебе моя капча
.

Saniok,
Поля хочу глянуть, и заголовки HTTP.

.
http://captcha.ru/kcaptcha/
Вотс, чоткая капча.
.
Windler (27.07.2013 / 22:03)
http://captcha.ru/kcaptcha/
Вотс, чоткая капча.
знаю, раньше пользовался)))))
.

Saniok, посмотрел. Гениальная у тебя капча)

Прикрепленные файлы:
.
Helltar (27.07.2013 / 22:40)
Saniok, посмотрел. Гениальная у тебя капча)
ггг.... какая есть..... я еще только учусь)))
Вот код капчи самой (+/-)
# setings
$data = array(
# Ширина изображения
'width'             =>  '90',
# Высота изображения
'height'            =>  '40',
# Размер шрифта
'font_size'         =>  '10',
# Отступ символов
'deltaX'            =>  '18',
# Отступ сверху
'y'                 =>  '35',
# Отступ снгизу
'x'                 =>  '25',
# Шрифт
'path_fonts'        =>  '../utils/fonts/default_font.ttf',
# Число символов на изображении
'letters'           =>  5

);


# Создание картинки
$im = imagecreatetruecolor($data['width'], $data['height']);
$black = imagecolorallocate($im, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));

# сглаживание
imageantialias($im, true);
# Случайная строка
$randStr = substr(md5(uniqid()), 0, $data['letters']);

# Вносим в куки на 120 с.
$cookie = md5($randStr);
$cookietime = time()+120; 
setcookie("captcha_code", $cookie, $cookietime);

# Записываем код в сессию
$_SESSION['captcha_code'] =  $randStr;



$directions = array('horizontal', 'vertical');
# Цвета для градиента
$color1 = imagecolorallocate($im, mt_rand(100, 255), mt_rand(100, 255), mt_rand(150, 255));
$color2 = imagecolorallocate($im, mt_rand(100, 255), mt_rand(100, 255), mt_rand(150, 255));

# Нанесения рондомнорго градиента фона
if ( ! in_array($direction, $directions)) {

$direction = $directions[array_rand($directions)];

      if (mt_rand(0, 1) === 1) {
        $temp = $color1;
       $color1 = $color2;
      $color2 = $temp;
       }
  }

# Извлечение цвета
$color1 = imagecolorsforindex($im, $color1);
$color2 = imagecolorsforindex($im, $color2);

# Подготовка к градиенту
$steps = ($direction === 'horizontal') ? $data['width'] : $data['height'];

$r1 = ($color1['red'] - $color2['red']) / $steps;
$g1 = ($color1['green'] - $color2['green']) / $steps;
$b1 = ($color1['blue'] - $color2['blue']) / $steps;

if ($direction === 'horizontal') {
  $x1 =& $i;
  $y1 = 0;
  $x2 =& $i;
  $y2 = $data['height'];
  } else {
  $x1 = 0;
  $y1 =& $i;
  $x2 = $data['width'];
  $y2 =& $i;
 }

# Выполнение градиента
for ($i = 0; $i <= $steps; $i++) {
$r2 = $color1['red'] - floor($i * $r1);
$g2 = $color1['green'] - floor($i * $g1);
$b2 = $color1['blue'] - floor($i * $b1);
$color = imagecolorallocate($im, $r2, $g2, $b2);
imageline($im, $x1, $y1, $x2, $y2, $color);
}

# Добавляем линии на изображене
for ($i = 0, $count = mt_rand(5, 4 * 4); $i < $count; $i++) {
    $color = imagecolorallocatealpha($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(100, 255), mt_rand(50, 120));
imageline($im, mt_rand(0, $data['width']), 0, mt_rand(0, $data['width']), $data['height'], $color);
}

# Наносим символы
for($i=0; $i <strlen($randStr); $i++)  {
    $size = rand($data['font_size']*2.1-2, $data['font_size']*2.1+2);
    $angle = -30 + rand(0,60);
    $x = ($i+1)*$data['font_size'] + rand(4, 7);
    $y = (($data['height']*2)/3) + rand(0, 5);
    $cod = $randStr{$i};
imagettftext($im, $size, $angle, $x, $y, $black, $data['path_fonts'], $cod);
$data['x'] += $data['deltaX'];

}



# Антикеширование
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");


# Создание рисунка в зависимости от доступного формата
if (function_exists("imagepng"))  {
header("Content-type: image/png");
imagepng($im);
} elseif (function_exists("imagegif")) {
header("Content-type: image/gif");
imagegif($im);
} elseif (function_exists("imagejpeg"))  {
header("Content-type: image/jpeg");
imagejpeg($im, "", 175);
} else  {
die("No image support in this PHP server!");
}

# Удаляем изображение
imagedestroy($im);

С коментариями
Всего: 33