Защита форума phpBB 2.0.22 от спама
Речь сегодня пойдет о защите форума phpBB от спама. Большой истории взаимодействия с движками форумов у меня нет, поэтому этот материал будет полезен, наверное, только новичкам.
Защита регистрации по умолчанию мало что дает и после пяти месяцев неактивной работы форума было уже более 600 левых пользователей. Я к этому делу подходила сначала ручным баном каждого автора спам-сообщения (приспособив кнопочку с помощью мода Moderator ban). Но когда я увидела цифру 600, поняла, что надо что-то кардинально менять, и занялась поиском решения активнее некуда.
При этом я 5 месяцев без дела не сидела и 2 раза заглянула в список модов для phpBB на сайте русскоязычной поддержки пользователей форума phpbbguru.net. Но, к моему удивлению, ничего связанного со спамом не нашла.
Мне еще казалось, что от пользователя надо требовать каждый раз при добавлении сообщения заполнять капчу. И поэтому меня и удивило: в админке "Включить визуальное подтверждение" отмечено переключателем, так почему же обычный зарегистрированный пользователь не вводит капчу при отправке сообщений?
Все объяснилось при чтении форума http://www.phpbbguru.net/community/, где я узнала, что юзера проверяют только при регистрации и при анонимном постинге, а авторизованных проверять не принято. У меня форум только для авторизованных, поэтому интересовала только защита при регистрации.
Сначала я решила привести базу данных MySQL в порядок. Сначала удалила всех тех, кто не подтверждал по e-mail свою регистрацию. Из админки по одному удалять очень неудобно, поэтому я сделала это через PHPMyAdmin.
Как удалять пользователей из таблицы:
- Зайдите в PHPMyAdmin, выберите в выпадающем списке базу данных, содержащую таблицы форума.
- Найдите имя строки phpbb_users, нажмите на кнопку .
- Для сортировки по значению "user_active", кликните по этому слову в заголовке столбца. "0" = пользователь свой аккаунт не активировал по почте, "1" = активировал, а "-1" у анонимного пользователя, удалять ни в коем случае нельзя.
- Можно изменить показ по умолчанию 30 строк, чтобы удалять было проще сразу большими пачками. Внизу впишите удовлетворяющее число строк в таблице и нажмите .
- Далее нажмите на ссылку в низу таблицы "Отметить все", при этом выделятся все строки на текущей странице, а у пользователя со значением "-1" снимите выделение, так как его удалять нельзя.
- Нажмите под таблицей и подтвердите свой выбор.
Таким образом, все неактивные пользователи будут удалены из таблицы и форума. Все их персональные данные, ссылки в профиле, ICQ, и т.п. исчезнут безвозвратно.
Потом я решила удалить вообще всех тех, кто оставлял спам на форуме или даже не оставлял, но просто числится на форуме и своими ссылками в профиле портит погоду.
В итоге из 600 с лишним пользователей я оставила только 6.
Содержание таблицы phpbb_banlist я тоже полностью очистила, для экономии места и для порядка, ведь всех забаненных пользователей, IP адресов и e-mail уже не было, и я собиралась поставить от них защиту, если они захотят "напасть" снова.
Из предложенных я выбрала модуль Anti Bot Question MOD, потому что задавать вопросы при регистрации мне показалось очень эффективны средством, кроме того, на drupal.ru к анонимным комментаторам применяется такая же система (я даже оттуда пару вопросов взяла когда редактировала ).
Подробно о нем написано в этом топике. Он дает возможность:
- Создавать неограниченное количество вопросов.
- Вопросы трех типов: просто текстовые, текстовые с картинкой (можно загружать свою) и вопрос на картинке.
- Загружать свои изображения для использования в вопросах.
- Включить автоматические проверки - вопросы, которые генерируются без участия админа, например:
Напишите результат вычисления во второй строке:
507476+226172-137191=?
(225*1557)+224582=?
Настраивается число строк с задачами - от 1 до 4, эти выражения могут быть в виде капчи - разными шрифтами на картинке, сложность которой тоже можно выбрать (например, разноцветная сетка на фоне символов).
- Можно настроить, сколько неудачных попыток может быть при ответе на вопросы.
- Все вопросы появляются при регистрации пользователя случайно, то есть не один и тот же будет испытывать желающего зарегистрироваться, а каждый раз разные.
- Производится подсчет заблокированных регистраций. Таким образом можно легко следить за активностью спамеров.
Ну, начнем. Я расскажу, как я устанавливала этот мод на свой форум. При этом на нем уже стоят Moderator ban и Admin Userlist (второй, кстати, выводит список пользователей в админке со ссылками на редактирование и установление прав для каждого, но он не предоставляет ссылок для удаления нескольких пользователей сразу).
Установка
- Скачайте мод Anti Bot Question MOD. При этом версия его не имеет отношения к версии форума, качайте последнюю.
- Скачайте файл русификации (не путая версии).
- В папке с русификацией в install.txt написано:
#-----[ COPY ]------------------------
#
copy lang_russian/*.* to language/lang_russian/*.*
#что может быть непонятно. Объясню: скопируйте папку lang_russian в root/language мода до начала установки.
- Файл information_english.txt в папке мода ничего про установку не расскажет, кроме того, что о ней можно прочитать в anti-bot-question-mod_v_3_0_0.txt. Открываем его. Я скажу, что там много лишнего и к установке мало отношения имеет, поэтому читать стоит только после слов:
############################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
############################################которые означают, что нужно обязательно сделать бэкап файлов вашего форума, так как придется их много менять и должна быть возможность вернуть все как было.
- Структура этой инструкции заключается в том, что сначала дается указание для четырех наций на родном языке, а потом публикуется международная инструкция уже без #:
# EN:
# create following folders:
#
# DE:
# folgende Verzeichnisse erstellen:
#
# FR:
# Crйez les rйpertoires suivants:
#
# ES:
# crear las siguientes carpetas:
#
# abq_mod
# abq_mod/fonts
# images/abq_mod
# images/abq_mod/admin
# images/abq_mod/cache
#
Create folder: abq_mod
Create folder: abq_mod/fonts
Create folder: images/abq_mod
Create folder: images/abq_mod/admin
Create folder: images/abq_mod/cacheВы можете прочитать предназначенные для англоговорящих (EN) указания и выполнить команды под ними.
- Создав папки, скопируйте файлы через FTP, они расположены так же, как папки в директориях на сайте, поэтому просто запаситесь вниманием и терпением и произведите манипуляции со всеми файлами папки root, которая соответствует корню форума, при этом совсем не обязательно смотреть на список файлов из инструкции по установке - копировать по одному как там написано не стоит.
Кроме того, продублируйте копирование файлов в папки тем, чтобы при смене темы по прошествии времени не пришлось вспоминать, что же я делал несколько месяцев/лет назад. То есть все, что предназначено для папок /templates/subSilver/admin/ нужно продублировать и для /templates/ваша_тема/admin/.
- Далее идет команда выполнить запрос SQL. Войдите в PHPMyAdmin, выберите базу, содержащую таблицы форума, нажмите на вкладку
CREATE TABLE phpbb_anti_bot_quest_config (
и заканчивая
'50dd984877', '', '', '', '', '', '', '', '', '', '', '');
и вставьте в поле "Выполнить SQL-запрос(ы) к базе данных ...". Этот запрос создаст необходимые для мода таблицы и наполнит их содержанием.
, скопируйте из anti-bot-question-mod_v_3_0_0.txt текст, начиная со строки - Далее снова возьмите в охапку терпение, потому что предстоит отредактировать массу файлов. Просто следуйте командам:
[ OPEN ]
значит "открыть файл";[ FIND ]
значит "найти в файле";
Я делаю все эти команды в FTP клиенте, конкретно эту с помощью функции find and replace[ AFTER, ADD ]
или[ REPLACE WITH ]
или[ BEFORE, ADD ]
означают соответственно "добавить после", "заменить на" и "добавить перед";
а когда попросят открыть новый файл, сохраните и закройте предыдущий, чтобы избежать путаницы.
IN-LINE означает "внутри строки". - Теперь можно расслабиться - основная часть работы сделана. Осталось избавиться от ошибки, появляющейся на странице регистрации:
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/satnsk/public_html/forum1/db/mysql4.php on line 318
Если у вас нет ее, ничего делать не надо. Но у меня была и я поступила как написано в этом сообщении. Если все же ошибки остались, можно вообще удалить все строки, содержащие
$db->sql_freeresult($result);
из файла includes/usercp_register.php. Я так и сделала, потому что удалила строку в нем из неправильного места (она встречается много раз). - Итак, установка завершена. Поздравляю! Теперь можно зайти в админку, нажать на появившуюся ссылку "Anti Bot Question MOD" и приступить к чтению. Все по-русски, так что объяснять нет смысла. Осталось поменять/добавить/загрузить собственные вопросы и настроить существующие...
Я решила написать такой подробный отчет, потому что люблю, когда усилия мои не канут в Лету, а сохраняются для помощи другим и для собственной памяти, чтобы в следуущий раз не вспоминать как делать сделанное.
P.S. По прошествии 6 дней со дня установки мода на форум, спамеры активность не убавили и заблокировано уже 200 (!) регистраций, хотя люди-спамеры все же раз 5 зарегистрировались, но половина из них не активировали аккаунты, а один даже разместил свое наглое спам-сообщение, но был безжалостно удален из базы. То есть как видно защита довольно сильная, что мне и требовалось, значит я не зря старалась.
Редактируя файлы форума, меня не покидал вопрос: Каким образом я буду обновляться? Что, неужели мне придется все эти действия повторять после обновления? Может быть из-за этого я и оставила все это здесь, но меня действительно очень озадачило такое положение дел. И тут не раз я вспоминала как устроен Drupal, в котором не принято трогать код ядра, чтобы можно было без проблем обновляться и не терять измененные данные при изменении версии (внутри ветки). Слава Drupal!