Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2008, 12:44   #1
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию Защита от спама в форумах phpBB2

(с) Arigato, 2006-2007

В этой статье я хочу рассказать о двух методах защиты форума на базе движка phpBB2 от спамеров и их ботов.

Первое, что нужно сделать, что бы прекратить автоматическую регистрацию ботов и массовый спам в темах: закрыть возможность писать сообщение гостям, поставить картинку на форму регистрации и установить активацию учетной записи по E-Mail.

Изменение картинки при регистрации на форумах phpBB2 (против автоматической регистрации ботов)

В ходе эксплуатации форума быстро выясняется, что штатных методов для защиты не достаточно. Боты умеют регистрироваться, читать почту и, более того, спокойно распознают картинку, предоставляемую движком форума phpBB2.

Если же изменить картинку на более сложную, то можно остановить подавляющее большинство автоматически регистрируемых ботов.

Для этого нужно проделать следующее.

В папке includes форума изменить файл usercp_confirm.php:
Удалить всю часть файла после строчки
Код:
// output six seperate original pngs ... first way is preferable!
или же строчки (в разных версия форума могут встречаться несколько отличные друг от друга комментарии)
Код:
// Thanks to DavidMJ for emulating zlib within the code :)
и до конца файла. Вместо удаленной части вставить следующее:
Код:
// Изменение картинки в форме регистрации
// Автор мода: Arigato, 2006

list($usec, $sec) = explode(' ', microtime());
mt_srand($sec * $usec);

$font = getcwd() . "/includes/font.ttf";

$img = ImageCreate (320, 50);

$color = array();
$color[] = ImageColorAllocate ($img, 0, 0, 0);
$color[] = ImageColorAllocate ($img, 255, 0, 0);
$color[] = ImageColorAllocate ($img, 0, 255, 0);
$color[] = ImageColorAllocate ($img, 255, 255, 0);
$color[] = ImageColorAllocate ($img, 255, 0, 255);
$color[] = ImageColorAllocate ($img, 0, 255, 255);
$color[] = ImageColorAllocate ($img, 255, 255, 255);

$sx = ImageSX ($img) - 1;
$sy = ImageSY ($img) - 1;
$sc = count ($color) - 1;

// Фоновый шум:
for ($i = 0; $i < 1024; $i++)
{
   $x = mt_rand (0, $sx);
   $y = mt_rand (0, $sy);
   $c = $color[mt_rand(1,$sc)];
   ImageSetPixel ($img, $x, $y, $c);
}

// Вывод кода:
$xpos = mt_rand (8, 32);
$height = $sy - mt_rand (0, $sy / 4);
for ($i = 0; $i < strlen($code); $i++)
{
   $angle = mt_rand (0, 30) - 15;
   $size = mt_rand (0, 8) + 32;
   $ypos = $sy - mt_rand (8, $sy - $height - 8);
   $c = $color[mt_rand(1,$sc)];
   $rect = ImageTTFtext ($img, $size, $angle, $xpos, $ypos, $c, $font, $code[$i]);
   $width = $rect[2] - $rect[0];
   $height = $rect[1] - $rect[7];
   $xpos += $width + mt_rand (4, 48);
}

// Передний шум:
for ($i = 0; $i < 256; $i++)
{
   $x = mt_rand (0, $sx);
   $y = mt_rand (0, $sy);
   $c = $color[mt_rand(0,$sc)];
   ImageSetPixel ($img, $x, $y, $c);
}
for ($i = 0; $i < mt_rand (2, 8); $i++)
{
   $x1 = mt_rand (0, $sx);
   $y1 = mt_rand (0, $sy);
   $x2 = mt_rand (0, $sx);
   $y2 = mt_rand (0, $sy);
   $c = $color[mt_rand(0,$sc)];
   ImageLine ($img, $x1, $y1, $x2, $y2, $c);
}

header ("Content-type: image/png");
header ("Cache-control: no-cache, no-store");
ImagePng ($img);
ImageDestroy ($img);
?>
Кроме этого нужно поместить в папку includes файл со шрифтом font.ttf, архив с которым можно скачать ниже.
При желании можно использовать любой другой TrueType шрифт, содержащий латинские буквы и цифры.

Как показал опыт применения данного метода на многих форумах, автоматическая регистрация ботов после такой модификации прекращается полностью.
Изображения
Тип файла: png old_pic.png (14.5 Кб, 165 просмотров)
Тип файла: png new_pic.png (3.0 Кб, 185 просмотров)
Вложения
Тип файла: rar font.rar (20.2 Кб, 111 просмотров)

Последний раз редактировалось Arigato; 28.07.2008 в 12:49.
Arigato вне форума Ответить с цитированием
Старый 28.07.2008, 12:45   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

Разрешить отправлять личные сообщения только пользователям с 20 и более сообщениями на форуме phpBB2 (защита от спама в личку)

Да, сегодня уже и такой вид спама имеет место. Хотя он еще не получил большого распространения, о защите уже пора задуматься.
И так, что нужно делать.

Открыть файл privmsg.php, найти строчку
Код:
if ( $mode == 'newpm' )
Добавить выше следующий код:
Код:
// НАЧАЛО: отправка личных сообщений только для пользователей с 20 сообщениями на форуме
// Автор мода: Arigato, 2007
if ( $mode == 'post' || $mode == 'reply' || $mode == 'quote' )
{
   $mod_mes_count = 20;
   if ( $userdata['user_posts'] < $mod_mes_count )
   {
      message_die(GENERAL_MESSAGE, "<b>$userdata[username]</b>, у Вас на форуме <b>$userdata[user_posts]</b> сообщений<br />
      Отправлять личные сообщения Вы сможете, когда наберете <b>$mod_mes_count</b> или более сообщений на форуме");
   }
}
// КОНЕЦ: отправка личных сообщений только для пользователей с 20 сообщениями на форуме
Переменная $mod_mes_count определяет количество сообщений на форуме, после которого пользователю разрешается отправлять ЛС. Читать ЛС может любой пользователь.
Предупреждение о запрете отправки ЛС выводится по русски, многоязычность не поддерживается.
Arigato вне форума Ответить с цитированием
Старый 23.03.2009, 19:11   #3
Нита
Новичок
Джуниор
 
Регистрация: 23.03.2009
Сообщений: 1
По умолчанию

ПАСИБА ПАСИБА ПАСИБА ПАСИБА!!!!!!!
Все заработало!
Скажите пожалуйста, а вы не знаете, как сделать так, чтобы открыть форум гостям, но требовать от них картинку подтверждение при отправке сообщения?
Нита вне форума Ответить с цитированием
Старый 23.03.2009, 20:00   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

Цитата:
Скажите пожалуйста, а вы не знаете, как сделать так, чтобы открыть форум гостям, но требовать от них картинку подтверждение при отправке сообщения?
По-моему, есть готовый подобный мод.
Arigato вне форума Ответить с цитированием
Старый 17.02.2010, 02:43   #5
Oder
Новичок
Джуниор
 
Регистрация: 17.02.2010
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Разрешить отправлять личные сообщения только пользователям с 20 и более сообщениями на форуме phpBB2 (защита от спама в личку)

Да, сегодня уже и такой вид спама имеет место. Хотя он еще не получил большого распространения, о защите уже пора задуматься.
И так, что нужно делать.

Открыть файл privmsg.php, найти строчку
Код:
if ( $mode == 'newpm' )
Добавить выше следующий код:
Код:
// НАЧАЛО: отправка личных сообщений только для пользователей с 20 сообщениями на форуме
// Автор мода: Arigato, 2007
if ( $mode == 'post' || $mode == 'reply' || $mode == 'quote' )
{
   $mod_mes_count = 20;
   if ( $userdata['user_posts'] < $mod_mes_count )
   {
      message_die(GENERAL_MESSAGE, "<b>$userdata[username]</b>, у Вас на форуме <b>$userdata[user_posts]</b> сообщений<br />
      Отправлять личные сообщения Вы сможете, когда наберете <b>$mod_mes_count</b> или более сообщений на форуме");
   }
}
// КОНЕЦ: отправка личных сообщений только для пользователей с 20 сообщениями на форуме
Переменная $mod_mes_count определяет количество сообщений на форуме, после которого пользователю разрешается отправлять ЛС. Читать ЛС может любой пользователь.
Предупреждение о запрете отправки ЛС выводится по русски, многоязычность не поддерживается.
ERROR:


Warning: Cannot modify header information - headers already sent by (output started at /home/****/public_html/forum/privmsg.php:1) in /home/****/public_html/forum/includes/page_header.php on line 483

Warning: Cannot modify header information - headers already sent by (output started at /home/****/public_html/forum/privmsg.php:1) in /home/****/public_html/forum/includes/page_header.php on line 485

Warning: Cannot modify header information - headers already sent by (output started at /home/****/public_html/forum/privmsg.php:1) in /home/****/public_html/forum/includes/page_header.php on line 486
Oder вне форума Ответить с цитированием
Старый 17.02.2010, 11:11   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

Что-то Вы криво в privmsg.php записали. Видимо, в самое начало пустую строку добавили или сохранили в utf-8
Arigato вне форума Ответить с цитированием
Старый 25.10.2010, 15:16   #7
userilla
Новичок
Джуниор
 
Регистрация: 25.10.2010
Сообщений: 1
По умолчанию

Большое спасибо Arigato! Я просто не знал как избавится от этого хлама который постоянно лез ко мне. На других сайтах пробовал другие моды, но этот самый классный. Всем рекомендую - работает 200%. Не хотел я переходить на phpbb3, второй попроще и по дизайну больше нравится. Спасибо Arigato! Продолжаю юзать мой любимый phpbb2.
userilla вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Защита boostman Общие вопросы Delphi 4 21.06.2008 17:45
Установка форума на phpBB2 MaTBeu Помощь студентам 1 12.05.2008 08:57
Перенос базы с phpbb2 на phpbb3 + несколько доработок Hof Фриланс 3 10.05.2008 15:52
Регистрация на форумах в системе ucoz ben95 Работа с сетью в Delphi 5 28.04.2008 15:27
Microsoft Office Outlook : Как избавиться от спама? Rembo Софт 5 13.12.2007 14:08