Персональный сайт Александра Тауениса » Защита форума на PHPBB от спама

Защита форума на PHPBB от спама

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

От имени «NaskTeask» на этот форум был добавлен спам о кино портале. Добавлено: Чт ноя 17, 2011 1:38 pm

Те спам-сообщения я удалил. Через 10 дней, 27 ноября, на форуме уже было более 100 спамных сообщений. Сообщения я вычистил, а свободное написание анонимам запретил. Через день, у меня оказалось штук 20 новых аккаунтов и около 100 спам-сообщений, уже от имени этих самых новых аккаунтов форума. 🙂 Спамеров и их продукты жизнедеятельности я удалил, после чего поставил ручную активацию юзеров. В результате у меня в «Неактивированных пользователях» каждый день стало появляться по 5-7 новых записей, после активации которых, на форуме появлялся спам. Значит, надо определять, кто из них робот, а кто человек. Ручная активация по e-mail, очевидный вариант. Верно? А фиг мне — хостинг не умеет рассылать e-mail. Пришлось их рассылать самому. Из >500 юзеров за год никто не ответил. Значит это спам-аккаунты, вон их с форума! Но это не вариант, за выходные набиралось до 3 страниц с неактиватами. Однако, с декабря 2011 по ноябрь 2012 года я был вынужден использовать такой мазохизм. Однако, октябре 2012 года я продолжил поиски анти-спам решений (бесплатных, ибо в день форум посещают человек 6, не более). И прекрасно показал себя следующий способ:
В конец файла config.php (т.к. он не стирается при обновлении движка), перед «?>», я добавил следующие строчки

if (isset($_POST['password_confirm']) && isset($_POST['tz'])){ // Пришел запрос на регистрацию
if(
$_POST['tz'] == -12 || // Нереальная временная зона
($_POST['lang'] == 'en' && $_POST['change_lang'] != 'en') || // Изменен основной язык, но change_lang при это не изменен
($_POST['lang'] == 'en' && $_POST['submit'] == 'Отправить') // Язык вроде английский, а кнопка почему-то русская
){
header("HTTP/1.1 404 Not Found");
exit;
}
}

И данный способ пока что работает (естественно, блокирует только спам-регистрации, но не спам-посты). Это связано с тем, что основная масса спам-ботнетов (точнее, их клиентов-спамящих ботов) имеет баги (пока что?), и при регистрации некорректно подставляет параметры выбора языка в POST-запросе (т.е., ($_POST['lang'] == 'en' && $_POST['change_lang'] != 'en') при запросе живого юзера никогда не вернёт true). Кроме того, эти скоты всегда указывают временную зону -12 часов, в которой есть разве что 2 необитаемых острова (Бакер (Baker), 0° 13 N, 176° 31 W и Хоуленд (Howland), 0° 48 N, 176° 38 W). В случае такого стечения обстоятельств, антиспам-скрипт прекращает регистрацию.
Скрипт разработал тов. Zapimir (http://habrahabr.ru/post/131920/), за что ему большое спасибо.



Оставить комментарий

Защита от спама * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.