Advertisement:

Author Topic: Визуальная проверка при регистрации.  (Read 9086 times)

Offline viacheslav

  • Semi-Newbie
  • *
  • Posts: 32
День добрый.
Вот сегодня сменил версию форума с RC3 на 1.1 Final. И вот какой баг. Перестал работать аудиопроизношение букв проверки, произносилось только первые 3 буквы, остальные две нет. Сравнил со старым форумом, в итоге в новом в Subs-Sound.php отремировал внизу строчку:  header('Content-Length: ' . $file_size); - и все заработало.

Вопрос 1. Что это было, баг в финальной версии? Или это только мне повезло?

Вопрос 2.1: Эти буква проверки визуализации процитать не может ни один нормалный человек! Ни у меня , ни у кого-нибудь в офисе (без использования аудиопрослушивания) не получилось. Подскажите, мож есть умельцы, чтоб подкрутить такого без установки модов?

Вопрос 2.2: Короче тот же вопрос о нечетабельных буквах, но с другой стороны. Тут угораздило поставить форум на некий виндовый сервак, на котором уже стоял Апач. Тоже версию 1.1 Final. И представляете, там эти буковки визуальной проверки экзотические конечно, но вполне читабельные!! Начал разбираться, и вот что понял. Все зависит от значения некого переменного use_graphic_library. При одном значении картинка будет генериться невменяемая, а при другом он генериться, собирая gif-картинки нужных букв из папки fonts\... Вопрос, кто знает, чтобы подкрутить (задать некое фиксированное значение этому use_graphic_library или как-то иначе), чтоб окно визуальной проверки генерировалось именно вторым способом.

Кстати, частично вот сейчас решил проблему нечетабельности. В Register.php сменил диапазон отображаемых бкув на цифры (а заодно и в PersonalMessage.php). Понять цифры то значительно проще, чем буквы. Но вопросы остаются.
« Last Edit: December 06, 2006, 09:47:29 AM by viacheslav »

Offline †MavN†

  • Local Moderator
  • Sophist Member
  • *
  • Posts: 1,202
  • Gender: Male
  • MavnGroup
    • MavnGroup
Re: Визуальная проверка при регистрации.
« Reply #1 on: December 07, 2006, 11:46:04 AM »
можно посмотреть Subs-Graphics.php там прописываются параметры генерации картинок в частно фон цвет и все остальное правда поскольку я не программер влезть на столько глубоко просто не могу :(

Offline viacheslav

  • Semi-Newbie
  • *
  • Posts: 32
Re: Визуальная проверка при регистрации.
« Reply #2 on: December 08, 2006, 01:55:11 AM »
Да, я тоже не программер. Тоже понял, что это там, но вот понять ентот текст...
Попробовал просто убрать некие строки - откровенная ерунда получается.
В общем пока остановился на цифрах. Записал к ним (цифрам) звуковые файлы. А без визуальной проверки спамеры так и лезут. С цифрами вроде пока боты не срабатывают.
Хотя конечно я бы с большим удовольствием оставил буквы (но уж больно существующие не читабельны).

Если кто нашел способ изменить этот Subs-Graphics.php так, чтоб буквы были бы более читабельны человеком (но в разумных пределах, чтоб бот не смог бы их так запросто прочитать) - был бы рад этот способ узнать.

Offline †MavN†

  • Local Moderator
  • Sophist Member
  • *
  • Posts: 1,202
  • Gender: Male
  • MavnGroup
    • MavnGroup
Re: Визуальная проверка при регистрации.
« Reply #3 on: December 08, 2006, 02:35:11 AM »
вообще бот графику не читает :) ;) проверка идет на другом уровне

Offline viacheslav

  • Semi-Newbie
  • *
  • Posts: 32
Re: Визуальная проверка при регистрации.
« Reply #4 on: December 08, 2006, 02:59:20 AM »
вообще бот графику не читает :) ;) проверка идет на другом уровне
Тогда я не совсем понимаю нужность этих хитронаписанных букв. Можете растолковать чайнику, если возможно конечно.

Offline RXL

  • Semi-Newbie
  • *
  • Posts: 61
  • Gender: Male
    • Клуб программистов 'Весельчак У'
Re: Визуальная проверка при регистрации.
« Reply #5 on: December 10, 2006, 07:26:26 AM »
viacheslav, посмотри тут пару статей о методах распознавания некоторых простых реализаций CAPTCHA: http://www.captcha.ru/articles/
Позновательно.
От туда и вывод: если тебе сложно прочесть, то надежость компьютерного распознования будет очень низкая - значит защита достаочно высокая.

Offline vityusha

  • Newbie
  • *
  • Posts: 4
Re: Визуальная проверка при регистрации.
« Reply #6 on: December 13, 2006, 04:58:06 AM »
А у меня такой вопрос - после перехода с 1.1RC3 на 1.1Final не могу установить Advanced Visual Verification 1.1 mod (версия от 10 декабря). После нажатия на "установить" выдается информационное окно пакета, где есть "Установочные действия пакета". Там напротив "Изменение файла"  стоит "Ошибка", или в английском варианте "Execute modification" - "Modification parse error". После этого, если продолжить установку, то мод делает вид что установился, но самом деле нигде не появляется. В SMF 1.1RC3 и мод версии 1.0 вставали и работали просто на ура.

Облазил все форумы связанные с SMF (или как мне кажется все) но как решить эту проблему так и не нашел. Почему-то у всех все работает.

Помогите, пожалуйста, кто может.
« Last Edit: December 13, 2006, 05:00:53 AM by vityusha »

Offline †MavN†

  • Local Moderator
  • Sophist Member
  • *
  • Posts: 1,202
  • Gender: Male
  • MavnGroup
    • MavnGroup
Re: Визуальная проверка при регистрации.
« Reply #7 on: December 13, 2006, 09:00:03 AM »
а сам мод официально поддерживает 1.1 финал

Offline vityusha

  • Newbie
  • *
  • Posts: 4
Re: Визуальная проверка при регистрации.
« Reply #8 on: December 13, 2006, 09:02:43 AM »
В том-то и дело, официально поддерживает 1.1. В Топике про этот мод только спасибы стоят, значит ставится у людей. Хотя нашелся один человек с проблемой как у меня.

Offline Mithril

  • Newbie
  • *
  • Posts: 3
  • Gender: Male
    • smth strange and irregular
Re: Визуальная проверка при регистрации.
« Reply #9 on: December 17, 2006, 06:06:11 PM »
Сегодня его ставил. Без особенных проблем. А у Вас форум реквизиты к ftp не забыл, случаем? Может, ему прав на изменения не достаёт, он и не меняет..

Offline Roman Jankovski

  • Newbie
  • *
  • Posts: 2
Re: Визуальная проверка при регистрации.
« Reply #10 on: December 26, 2006, 02:05:56 PM »
Изменил функцию в Subs-Graphics.php, теперь капча выглядит куда более цивильно. Форум юзаю второй день, моды писать не умею, потому выкладываю так: :)

Code: [Select]
// Create the image for the visual verification code.
function showCodeImage($code)
{
  global $settings;

  // Is this GD2? Needed for pixel size.
  $testGD = get_extension_funcs('gd');
  $gd2 = in_array('imagecreatetruecolor', $testGD) && function_exists('imagecreatetruecolor');
  unset($testGD);

  // The amount of pixels inbetween characters.
  $character_spacing = 1;

  // The color of the characters shown (red, green, blue).
  $foreground_color = array(64, 101, 136);
  $background_color = array(236, 237, 243);

  // Has the theme author requested a custom color?
  if (isset($settings['verification_foreground'], $settings['verification_background']))
  {
    $foreground_color = $settings['verification_foreground'];
    $background_color = $settings['verification_background'];
  }

  if (!is_dir($settings['default_theme_dir'] . '/fonts'))
    return false;

  // Get a list of the available fonts.
  $font_dir = dir($settings['default_theme_dir'] . '/fonts');
  $font_list = array();
  $ttfont_list = array();
  while ($entry = $font_dir->read())
  {
    if (preg_match('~^(.+)\.gdf$~', $entry, $matches) === 1)
      $font_list[] = $entry;
    elseif (preg_match('~^(.+)\.ttf$~', $entry, $matches) === 1)
      $ttfont_list[] = $entry;
  }

  if (empty($font_list))
    return false;

  // Create a list of characters to be shown.
  $characters = array();
  $loaded_fonts = array();
  for ($i = 0; $i < strlen($code); $i++)
  {
    $characters[$i] = array(
      'id' => $code{$i},
      'font' => array_rand($font_list),
    );

    $loaded_fonts[$characters[$i]['font']] = null;
  }

  // Load all fonts and determine the maximum font height.
  foreach ($loaded_fonts as $font_index => $dummy)
    $loaded_fonts[$font_index] = imageloadfont($settings['default_theme_dir'] . '/fonts/' . $font_list[$font_index]);

  // Determine the dimensions of each character.
  $total_width = $character_spacing * strlen($code) + 10;
  $max_height = 0;
  foreach ($characters as $char_index => $character)
  {
    $characters[$char_index]['width'] = imagefontwidth($loaded_fonts[$character['font']]);
    $characters[$char_index]['height'] = imagefontheight($loaded_fonts[$character['font']]);

    $max_height = max($characters[$char_index]['height'], $max_height);
    $total_width += $characters[$char_index]['width'];
  }

  // Create an image.
  $code_image = imagecreate($total_width, $max_height);

  // Draw the background.
  $bg_color = imagecolorallocate($code_image, $background_color[0], $background_color[1], $background_color[2]);
  imagefilledrectangle($code_image, 0, 0, $total_width - 1, $max_height - 1, $bg_color);

  // Randomize the foreground color a little.
  for ($i = 0; $i < 3; $i++)
    $foreground_color[$i] = rand(max($foreground_color[$i] - 3, 0), min($foreground_color[$i] + 3, 255));
  $fg_color = imagecolorallocate($code_image, $foreground_color[0], $foreground_color[1], $foreground_color[2]);

  // Color for the dots.
  for ($i = 0; $i < 3; $i++)
    $dotbgcolor[$i] = $background_color[$i] < $foreground_color[$i] ? rand(0, max($foreground_color[$i] - 10, 0)) : rand(min($foreground_color[$i] + 10, 255), 255);
  $randomness_color = imagecolorallocate($code_image, $dotbgcolor[0], $dotbgcolor[1], $dotbgcolor[2]);

  // Fill in the characters.
  $cur_x = 0;
  foreach ($characters as $char_index => $character)
  {
    // Can we use true type fonts?
    $can_do_ttf = function_exists('imagettftext');
    if (!empty($can_do_ttf))
    {
      // GD2 handles font size differently.
      $font_size = $gd2 ? rand(15, 18) : rand(20, 25);

      // Work out the sizes - also fix the character width cause TTF not quite so wide!
      $font_x = $cur_x + 5;
      $font_y = $max_height - rand(5, 8);

      // What font face?
      if (!empty($ttfont_list))
      {
        $fontface = $settings['default_theme_dir'] . '/fonts/' . $ttfont_list[rand(0, count($ttfont_list) - 1)];
        //log_error($fontface);
      }

      // What color are we to do it in?
      $is_reverse = 0;
      $char_color = imagecolorallocate($code_image, rand(max($foreground_color[0] - 2, 0), $foreground_color[0]), rand(max($foreground_color[1] - 2, 0), $foreground_color[1]), rand(max($foreground_color[2] - 2, 0), $foreground_color[2]));

      $angle = rand(-100, 100) / 10;
      $show_letter = $character['id'];
      $fontcord = @imagettftext($code_image, 18, $angle, $font_x, $font_y, $char_color, $fontface, $show_letter);
      if (empty($fontcord))
        $can_do_ttf = false;
      elseif ($is_reverse)
      {
        imagefilledpolygon($code_image, $fontcord, 4, $fg_color);
        // Put the character back!
        imagettftext($code_image, 18, $angle, $font_x, $font_y, $randomness_color, $fontface, $show_letter);
      }

      if ($can_do_ttf)
        $cur_x = max($fontcord[2], $fontcord[4]) + 3;
    }

    if (!$can_do_ttf)
    {
      // Rotating the characters a little...
      if (function_exists('imagerotate'))
      {
        $char_image = function_exists('imagecreatetruecolor') ? imagecreatetruecolor($character['width'], $character['height']) : imagecreate($character['width'], $character['height']);
        $char_bgcolor = imagecolorallocate($char_image, $background_color[0], $background_color[1], $background_color[2]);
        imagefilledrectangle($char_image, 0, 0, $character['width'] - 1, $character['height'] - 1, $char_bgcolor);
        imagechar($char_image, $loaded_fonts[$character['font']], 0, 0, $character['id'], imagecolorallocate($char_image, rand(max($foreground_color[0] - 2, 0), $foreground_color[0]), rand(max($foreground_color[1] - 2, 0), $foreground_color[1]), rand(max($foreground_color[2] - 2, 0), $foreground_color[2])));
        $rotated_char = imagerotate($char_image, rand(-100, 100) / 10, $char_bgcolor);
        imagecopy($code_image, $rotated_char, $cur_x, 0, 0, 0, $character['width'], $character['height']);
        imagedestroy($rotated_char);
        imagedestroy($char_image);
      }
 
      // Sorry, no rotation available.
      else
        imagechar($code_image, $loaded_fonts[$character['font']], $cur_x, floor(($max_height - $character['height']) / 2), $character['id'], imagecolorallocate($code_image, rand(max($foreground_color[0] - 2, 0), $foreground_color[0]), rand(max($foreground_color[1] - 2, 0), $foreground_color[1]), rand(max($foreground_color[2] - 2, 0), $foreground_color[2])));
      $cur_x += $character['width'] + $character_spacing;
    }
  }

  // Make the background color transparent.
  imagecolortransparent($code_image, $bg_color);

  // Add some randomness to the background.
  for ($i = rand(0, 2); $i < $max_height; $i += rand(1, 3))
    for ($j = rand(0, 10); $j < $total_width; $j += rand(1, 15))
      imagesetpixel($code_image, $j, $i, rand(0, 1) ? $fg_color : $randomness_color);

  // Put in some lines too.
  $num_lines = 2;
  for ($i = 0; $i < $num_lines; $i++)
  {
    if (rand(0, 1))
    {
      $x1 = rand(0, $total_width);
      $x2 = rand(0, $total_width);
      $y1 = 0; $y2 = $max_height;
    }
    else
    {
      $y1 = rand(0, $max_height);
      $y2 = rand(0, $max_height);
      $x1 = 0; $x2 = $total_width;
    }

    imageline($code_image, $x1, $y1, $x2, $y2, rand (0, 1) ? $fg_color : $randomness_color);
  }

  // Show the image.
  if (function_exists('imagegif'))
  {
    header('Content-type: image/gif');
    imagegif($code_image);
  }
  else
  {
    header('Content-type: image/png');
    imagepng($code_image);
  }

  // Bail out.
  imagedestroy($code_image);
  die();
}

Это для версии 1.1.1, если что.
« Last Edit: December 26, 2006, 02:59:21 PM by Roman Jankovski »

Offline †MavN†

  • Local Moderator
  • Sophist Member
  • *
  • Posts: 1,202
  • Gender: Male
  • MavnGroup
    • MavnGroup
Re: Визуальная проверка при регистрации.
« Reply #11 on: December 27, 2006, 02:03:44 AM »
Выглядит нормально :) к вечеру мод сделаем :) вывесим здесь если захочешь опубликуешь его здесь же на офф сайте

Offline †MavN†

  • Local Moderator
  • Sophist Member
  • *
  • Posts: 1,202
  • Gender: Male
  • MavnGroup
    • MavnGroup
Re: Визуальная проверка при регистрации.
« Reply #12 on: January 07, 2007, 07:48:07 AM »
в общем мод сделал так что можете пользоваться

Offline qwerty12345

  • Newbie
  • *
  • Posts: 6
Re: Визуальная проверка при регистрации.
« Reply #13 on: January 26, 2007, 04:40:21 AM »
Вопрос 2.2: Короче тот же вопрос о нечетабельных буквах, но с другой стороны. Тут угораздило поставить форум на некий виндовый сервак, на котором уже стоял Апач. Тоже версию 1.1 Final. И представляете, там эти буковки визуальной проверки экзотические конечно, но вполне читабельные!! Начал разбираться, и вот что понял. Все зависит от значения некого переменного use_graphic_library. При одном значении картинка будет генериться невменяемая, а при другом он генериться, собирая gif-картинки нужных букв из папки fonts\... Вопрос, кто знает, чтобы подкрутить (задать некое фиксированное значение этому use_graphic_library или как-то иначе), чтоб окно визуальной проверки генерировалось именно вторым способом.
В Windows версии используются ttf шрифты, а в nix* системах  букв из папки fonts\, они там заданы картинками, можно попробовать подкорректировать шрифты на картинке.