Защита форума phpBB 2.0.22 от спама

Защита форума phpBB от спамаРечь сегодня пойдет о защите форума phpBB от спама. Большой истории взаимодействия с движками форумов у меня нет, поэтому этот материал будет полезен, наверное, только новичкам.

Защита регистрации по умолчанию мало что дает и после пяти месяцев неактивной работы форума было уже более 600 левых пользователей. Я к этому делу подходила сначала ручным баном каждого автора спам-сообщения (приспособив кнопочку с помощью мода Moderator ban). Но когда я увидела цифру 600, поняла, что надо что-то кардинально менять, и занялась поиском решения активнее некуда.

При этом я 5 месяцев без дела не сидела и 2 раза заглянула в список модов для phpBB на сайте русскоязычной поддержки пользователей форума phpbbguru.net. Но, к моему удивлению, ничего связанного со спамом не нашла.

Мне еще казалось, что от пользователя надо требовать каждый раз при добавлении сообщения заполнять капчу. И поэтому меня и удивило: в админке "Включить визуальное подтверждение" отмечено переключателем, так почему же обычный зарегистрированный пользователь не вводит капчу при отправке сообщений?

Все объяснилось при чтении форума http://www.phpbbguru.net/community/, где я узнала, что юзера проверяют только при регистрации и при анонимном постинге, а авторизованных проверять не принято. У меня форум только для авторизованных, поэтому интересовала только защита при регистрации.

Сначала я решила привести базу данных MySQL в порядок. Сначала удалила всех тех, кто не подтверждал по e-mail свою регистрацию. Из админки по одному удалять очень неудобно, поэтому я сделала это через PHPMyAdmin.

Как удалять пользователей из таблицы:

  1. Зайдите в PHPMyAdmin, выберите в выпадающем списке базу данных, содержащую таблицы форума.
  2. Найдите имя строки phpbb_users, нажмите на кнопку обзор.
  3. Для сортировки по значению "user_active", кликните по этому слову в заголовке столбца. "0" = пользователь свой аккаунт не активировал по почте, "1" = активировал, а "-1" у анонимного пользователя, удалять ни в коем случае нельзя.
  4. Можно изменить показ по умолчанию 30 строк, чтобы удалять было проще сразу большими пачками. Внизу впишите удовлетворяющее число строк в таблице и нажмите Показать.
  5. Далее нажмите на ссылку в низу таблицы "Отметить все", при этом выделятся все строки на текущей странице, а у пользователя со значением "-1" снимите выделение, так как его удалять нельзя.
  6. Нажмите красный крестик под таблицей и подтвердите свой выбор.

Таким образом, все неактивные пользователи будут удалены из таблицы и форума. Все их персональные данные, ссылки в профиле, 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 (второй, кстати, выводит список пользователей в админке со ссылками на редактирование и установление прав для каждого, но он не предоставляет ссылок для удаления нескольких пользователей сразу).

Установка

  1. Скачайте мод Anti Bot Question MOD. При этом версия его не имеет отношения к версии форума, качайте последнюю.
  2. Скачайте файл русификации (не путая версии).
  3. В папке с русификацией в install.txt написано:
    #-----[ COPY ]------------------------
    #
    copy lang_russian/*.* to language/lang_russian/*.*
    #

    что может быть непонятно. Объясню: скопируйте папку lang_russian в root/language мода до начала установки.

  4. Файл 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
    ############################################

    которые означают, что нужно обязательно сделать бэкап файлов вашего форума, так как придется их много менять и должна быть возможность вернуть все как было.

  5. Структура этой инструкции заключается в том, что сначала дается указание для четырех наций на родном языке, а потом публикуется международная инструкция уже без #:
    # 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) указания и выполнить команды под ними.

  6. Создав папки, скопируйте файлы через FTP, они расположены так же, как папки в директориях на сайте, поэтому просто запаситесь вниманием и терпением и произведите манипуляции со всеми файлами папки root, которая соответствует корню форума, при этом совсем не обязательно смотреть на список файлов из инструкции по установке - копировать по одному как там написано не стоит.

    Кроме того, продублируйте копирование файлов в папки тем, чтобы при смене темы по прошествии времени не пришлось вспоминать, что же я делал несколько месяцев/лет назад. То есть все, что предназначено для папок /templates/subSilver/admin/ нужно продублировать и для /templates/ваша_тема/admin/.

  7. Далее идет команда выполнить запрос SQL. Войдите в PHPMyAdmin, выберите базу, содержащую таблицы форума, нажмите на вкладку SQL, скопируйте из anti-bot-question-mod_v_3_0_0.txt текст, начиная со строки
    CREATE TABLE phpbb_anti_bot_quest_config (

    и заканчивая

    '50dd984877', '', '', '', '', '', '', '', '', '', '', '');

    и вставьте в поле "Выполнить SQL-запрос(ы) к базе данных ...". Этот запрос создаст необходимые для мода таблицы и наполнит их содержанием.

  8. Далее снова возьмите в охапку терпение, потому что предстоит отредактировать массу файлов. Просто следуйте командам:
    • [ OPEN ] значит "открыть файл";
    • [ FIND ] значит "найти в файле";
      Я делаю все эти команды в FTP клиенте, конкретно эту с помощью функции find and replace
    • [ AFTER, ADD ] или [ REPLACE WITH ] или [ BEFORE, ADD ] означают соответственно "добавить после", "заменить на" и "добавить перед";

    а когда попросят открыть новый файл, сохраните и закройте предыдущий, чтобы избежать путаницы.
    IN-LINE означает "внутри строки".

  9. Теперь можно расслабиться - основная часть работы сделана. Осталось избавиться от ошибки, появляющейся на странице регистрации:
    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. Я так и сделала, потому что удалила строку в нем из неправильного места (она встречается много раз).

  10. Итак, установка завершена. Поздравляю! Теперь можно зайти в админку, нажать на появившуюся ссылку "Anti Bot Question MOD" и приступить к чтению. Все по-русски, так что объяснять нет смысла. Осталось поменять/добавить/загрузить собственные вопросы и настроить существующие...

Я решила написать такой подробный отчет, потому что люблю, когда усилия мои не канут в Лету, а сохраняются для помощи другим и для собственной памяти, чтобы в следуущий раз не вспоминать как делать сделанное.

P.S. По прошествии 6 дней со дня установки мода на форум, спамеры активность не убавили и заблокировано уже 200 (!) регистраций, хотя люди-спамеры все же раз 5 зарегистрировались, но половина из них не активировали аккаунты, а один даже разместил свое наглое спам-сообщение, но был безжалостно удален из базы. То есть как видно защита довольно сильная, что мне и требовалось, значит я не зря старалась.

Редактируя файлы форума, меня не покидал вопрос: Каким образом я буду обновляться? Что, неужели мне придется все эти действия повторять после обновления? Может быть из-за этого я и оставила все это здесь, но меня действительно очень озадачило такое положение дел. И тут не раз я вспоминала как устроен Drupal, в котором не принято трогать код ядра, чтобы можно было без проблем обновляться и не терять измененные данные при изменении версии (внутри ветки). Слава Drupal!