Защита от спама в phpBB3 без капчи
Думаю, многие владельцы форумов на phpBB 3 уже знают, что стандартная капча, идущая в комплекте с форумом, особо не спасает.
В общем, зайдя однажды на свой форум, увидел, что за считанные часы добавилось несколько сотен спаммерских сообщений, при том, что и капча включена, и постить можно только зарегенным. Поначалу попробовал просто выбрать другую капчу, но тоже не помогло. Тогда и задумался о другом подходе.
Защита на основе анализа действий пользователя
В общем первым делом добавил к форуму скриптец, который писал все запросы как GET, так и POST в лог-файл, чтобы можно было их проанализировать.
Сразу уточню, что форум русскоязычный (русский включен по умолчанию), но есть и английский.
И так типичный запрос на регистрацию от бота выглядит так (выводятся метод, url, referrer, и потом инфа из POST-запроса, email я убрал):
GET /forum/index.php /forum/index.php
GET /forum/ucp.php?mode=register /forum/ucp.php?mode=register
POST /forum/ucp.php?mode=register /forum/ucp.php?mode=register
'agreed' => 'Я согласен с этими условиями',
'change_lang' => '',
'creation_time' => '1320421149',
'form_token' => '16d4c035a7de1680c4e19fe0addd242d7edf1822',
POST /forum/ucp.php?mode=register /forum/ucp.php?mode=register
'username' => 'Shemtrearve',
'email' => 'deassepleadia@....com',
'email_confirm' => 'deassepleadia@....com',
'new_password' => 'q49uh3oYcN',
'password_confirm' => 'q49uh3oYcN',
'lang' => 'en',
'tz' => '-12',
'agreed' => 'true',
'change_lang' => '0',
'submit' => 'Отправить',
'creation_time' => '1320421154',
'form_token' => '97471b3af621c1a60f825e50d2b61b3346b48025',
GET /forum/ucp.php?mode=login /forum/ucp.php?mode=login
Также я убрал sid из URL, боты их зачастую добавляют, хотя они отключены у меня в форуме. Все запросы сделаны с интервалом 4-5 секунд.
Теперь ищем странности в запросе:
- Естественно сразу видно, что бот заходит на страницу с этой же страницы (referrer совпадает со страницей).
- Во втором POST запросе, обращаем внимание на то, что бот выбрал английский язык, при том в предыдущем запросе он язык не менял, и типа спокойно прочитал правила форума на русском, а потом выбрал английский.
- Далее мы выдим, что выбрана временная зона -12, хотя эта зона чисто условна и там никто не живет. А всё дело в том, что phpBB эту дату высталяет JavaScript-ом, а у ботов она остается по умолчанию.
- Далее change_lang = 0 при том, что в phpBB не может быть такого значения, там должен быть код языка.
- Ну и напоследок submit на русском языке, при выбранном английском языке. Есть еще тупые боты которые не понимают кириллицы, и в это поле вставляются вопросительные знаки.
В общем, вывод достаточно простой, но основе пунктов 2-5, делаем небольшой скрипт, который будет препятствовать регистрации ботов.
Код выглядит примерно так
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;
}
}
Проще всего добавить этот код в конце config.php, чтобы не долго ковыряться, не снести его при обновлении форума, да и сразу посылать ботов лесом. Можно упростить условие по желанию, просто для наглядности расписал. Благодаря такому простому коду я отсеял практически всех спаммеров, при том, что даже выключил капчу.
Понятное дело, что со временем боты научатся это обходить, но тогда и мы, что-нибудь новое придумаем.
- 0 Защита от спама в phpBB3 без капчи (09.10.2013) ← вы тут
2 комментариев
Если нет желания вручную делать правки в коде и потом поддерживать изменения, то рекомендую воспользоваться готовым модулем защиты phpBB3 от ботов без Капчи, модуль называется CleanTalk.
http://cleantalk.ru/phpbb-anti-spam-mod