Антиспам для форума

Материал из Wiki - thelogin.ru
Перейти к: навигация, поиск

Основанный на содержании постов

Форум TheLogin.RU попал в спамерские базы, и на него лавинами пошёл спам - по 10 сообщений в день. Написал простейший хак - теперь раза два в неделю что-то появляется. Скрипт работает надёжно. Нормальные сообщения не отсекались, зато сколько работы облегчил (судя по логам)...

Вот код хака (местоположение: newpost_process):

if ($vbulletin->userinfo['userid'] == 0 || $vbulletin->userinfo['posts'] < 5)
{
	// Обрабатываем сообщения только гостей и новичков
	$message = $vbulletin->GPC['message'];
 
	if (substr_count($message, 'http://') > 1 || substr_count($message, '[url' ) > 1)
	{
		// Больше одной ссылки в сообщении
		standard_error('К сожалению, на данном этапе вашего участия на форуме вы не можете оставлять более одной ссылки в сообщении. Это сделано в целях защиты от спама.');
	}
 
	if (!preg_match('|[а-я]|i', $message))
	{
		// Весь буржуйский спам вообще начисто чистится
		// Тем, у кого форум в кодировке UTF-8 (как у меня), необходимо добавить модификатор u к шаблону
		standard_error('Извините, но ваше соообщение должно содержать русские буквы. Это сделано в целях защиты от англоязычного спама. Приносим свои извинения.');
	}
 
	if (preg_match("![0-9][ \)\.]*[0-9]{13}[\r\n ]*!Usi", $message))
	{
		standard_error('Извините, но ваше сообщение похоже на спам о заработке на Яндекс.Денгьах.');
	}
 
	if (preg_match("![0-9][ \)\.]*(R|Z)[0-9]{12}[\r\n ]*!Usi", $message))
	{
		standard_error('Извините, но ваше сообщение похоже на спам о заработке на Webmoney.');
	}
}

Элементарно переделывается под другие форумы. Пользуйтесь на здоровье!

Лучшая капча - её отсутствие

Идея взята у Sergey89. Идея проста: активируем капчу в настройках форума (Основные настройки » Регистрация пользователей » Проверка автоматических регистраций). Теперь правим шаблон register. Находим
$imagereg
и заменяем на
<div style="display: none;">$imagereg</div>
Думаю, идею вы уже поняли. Мы скрываем капчу и поле ввода кода от простых людей, которые поле не увидят. И, соответственно, не заполнят. В отличие от роботов. Теперь реализуем программную логику. Местоположение хака register_addmember_process:
if ($vbulletin->GPC['imagestamp'] != '')

{ standard_error('Поле ввода кода с картинки скрыто при помощи CSS (это защита от спама). К сожалению, ваш браузер не поддерживает CSS в полном объёме, и вы заполнили это поле. Пожалуйста, вернитесь назад и очистите это поле.</p><p>Или вы робот?');

}
Местоположение хака register_start:
if ($_REQUEST['do'] == 'addmember')

{ $vbulletin->options['regimagecheck'] = false;

}

За два месяца с момента установки хака зарегистрировалось два бота (уж не знаю как им это удалось, может они и не боты) против обычных 50-60.

Анонимусы рулят

Помните волнения на LOR'е когда всех anonymous'ов переименовали в «незарегистрированных участников». Вот так же будет вести себя наш форум с анонимным постингом. Идея так же проста, как и предыдущая: мы делаем поле ввода имени пользователя при анонимном постинге read-only. Пользователи не смогут его изменить. В отличие от тупых ботов, всюду пихающих свои бессмысленные ники. Открываем шаблон newpost_usernamecode, заменяем
<td class="smallfont" colspan="2"><input type="text" class="bginput" name="username" value="$bbuserinfo[username]" size="50" style="margin-top:1px" tabindex="1" /></td>
на
<td class="smallfont" colspan="2"><input type="text" class="bginput" name="username" value="$bbuserinfo[username]" size="50" style="margin-top:1px" tabindex="1" readonly="readonly" /></td>
Теперь ставим хак в newpost_process:
if ($vbulletin->userinfo['userid'] == 0)

{ // Спамеры-анонимы if ($_REQUEST['username'] != 'anonymous') { standard_error('Гм, поле ввода имени для анонимных пользователей заблокировано на <b>anonymous</b>, однако вы сумели изменить его значение на <b>' . htmlspecialchars($_REQUEST['username']) . '</b>, из чего я могу сделать предположение, что вы - спам-бот :) Пожалуйста, вернитесь назад и НЕ меняйте имя пользователя!'); }

}
Не забудьте поменять anonymous в вышеприведённом коде на другое имя, которое по умолчанию имеют у вас незарегистрированные пользователи (стандартная фраза unregistered).
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты
Тэги