Антиспам для форума
Основанный на содержании постов
Форум 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>
if ($vbulletin->GPC['imagestamp'] != ''){ standard_error('Поле ввода кода с картинки скрыто при помощи CSS (это защита от спама). К сожалению, ваш браузер не поддерживает CSS в полном объёме, и вы заполнили это поле. Пожалуйста, вернитесь назад и очистите это поле.</p><p>Или вы робот?');
}
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>
if ($vbulletin->userinfo['userid'] == 0){ // Спамеры-анонимы if ($_REQUEST['username'] != 'anonymous') { standard_error('Гм, поле ввода имени для анонимных пользователей заблокировано на <b>anonymous</b>, однако вы сумели изменить его значение на <b>' . htmlspecialchars($_REQUEST['username']) . '</b>, из чего я могу сделать предположение, что вы - спам-бот :) Пожалуйста, вернитесь назад и НЕ меняйте имя пользователя!'); }
}