Атака китайских ботов

Вопросы без привязки к версии. Установлена авточистка (2 года).
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
hd321kbps
phpBB 2.0.3
Сообщения: 366
Стаж: 14 лет 3 месяца
Откуда: Россия, Крым, Армянск
Благодарил (а): 191 раз
Поблагодарили: 346 раз

Атака китайских ботов

Сообщение hd321kbps »

Сегодня заметил на нескольких форумах наплыв ботов из китая от 100-300 одновременно, которые создают нагрузку на хостинг.
Все заходят с телефона Android и iphone Os.
Адреса ботов:
54.222.*.*
54.223.*.*
52.80.*.*
52.81.*.*
52.82.*.*
52.83.*.*
220.243.*.*
139.217.*.*
139.219.*.*
У кого наблюдается такое-же отпишитесь)


---------------------------
Варианты блокировки ботов:
Re: Атака китайских ботов - от Nekstati
Re: Атака китайских ботов - от Kuskow, php
Re: Атака китайских ботов - от Kuskow, nginx
Последний раз редактировалось Татьяна5 11.07.2026 18:43, всего редактировалось 1 раз.
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 460
Стаж: 10 лет 1 месяц
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 46 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Perfecthus, сейчас реализованы все идеи, некоторые из них ждали 7 лет. Только 2 недели назад я понял, что людей не надо переадресовывать с p= на t=&start=. А потом увидел, как криво это работает на другом популярном форуме и убедился в своём выводе.

Пока нет нереализованных идей. Хорошо бы накопить практическую базу, услышать, у кого что не так. Тогда придёт что-то ещё, наверное.

Ну и результат настолько поражает, что хочется погордиться собой хоть какое-то время.
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 460
Стаж: 10 лет 1 месяц
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 46 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Kuskow писал(а): 27.06.2026 16:27 Я теперь сделал так. Когда fail2ban обнаруживает 2x444 за две минуты, он банит на сутки не один конкретный адрес, а всю подсеть класса C, то есть, 1.2.3.x. Так что, соседние адреса забанены заранее ещё до того, как начнут лезть на кактус. В бане постоянно около 400 таких подсетей.
Интересно, что день ото дня отличается. Вчера было 780 подсетей вбане, сегодня только 170. То есть, позавчера была атака, а вчера боты взяли выходной или в отпуск ушли, или направились на другие сервера.
Аватара пользователя
Михаил Молчанов
phpBB 1.4.4
Сообщения: 173
Стаж: 1 год 11 месяцев
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 7 раз

Re: Атака китайских ботов

Сообщение Михаил Молчанов »

У меня тоже активность ботов упала.
Создал и раскручиваю свой форум! :D

Изображение
Shredder
Former team member
Сообщения: 2262
Стаж: 17 лет 7 месяцев
Благодарил (а): 165 раз
Поблагодарили: 158 раз

Re: Атака китайских ботов

Сообщение Shredder »

Kuskow писал(а): 05.07.2026 7:19 Совместимо с PHP 7.4, 8.x.
На PHP 7.4:
parse error syntax error на линии:

Код: Выделить всё

        if ((int)@$_GET['start'] % match(basename($_SERVER['SCRIPT_NAME'],'.php')) { 'viewtopic' => $ppp, 'viewforum' => $tpf, default => 1 }) {
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 460
Стаж: 10 лет 1 месяц
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 46 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Shredder, Да, пардон, для 7.4 нужно переписать этот блок:

Код: Выделить всё

    # Неправильная пагинация
    if ((int)@$_GET['start'] % match(basename($_SERVER['SCRIPT_NAME'],'.php')) { 'viewtopic' => $ppp, 'viewforum' => $tpf, default => 1 }) {
      http_response_code(410); die; }

Вот так правильно:

Код: Выделить всё

    # Неправильная пагинация
    if ((int)@$_GET['start'] % (@$_GET['t'] ? $ppp : (@$_GET['f'] ? $tpf : 1))) { http_response_code(410); die; }

И поскольку это исправление критическое, сейчас выложу следующую версию с накопленными другими исправлениями и дополнениями.
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 460
Стаж: 10 лет 1 месяц
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 46 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Новая версия 5.1 антибота для тех, у кого нет доступа к настройкам Apache/Nginx. Отсекаются зловредные боты, оптимизируется нагрузка на базу данных за счёт исправления запросов. Проверено и работает на своём форуме (в профиле есть ссылка). Совместимо с PHP 7.4 и 8.x. Если раньше устанавливали этот скрипт, теперь нужно выполнить только пункт 2. Основные отличия от предыдущей версии:
  • исправлен блок неправильной пагинации для совместимости с PHP 7.4
  • введена обработка корня форума / и переадресация /index.php на корень
  • блоки расставлены в логическом эффективном порядке
Порядок внедрения барьера перед ботами в phpBB:

1️⃣ В самое начало файла /assets/javascript/core.js добавляем следующий код (прям первой строкой).
* Обязательно повторить это исправление после каждого обновления версии движка, иначе ни один человек на новом устройстве не сможет зайти или зарегистрироваться на форуме.

Код: Выделить всё

document.cookie = "checked=1; path=/; max-age=31104000; SameSite=Lax";

2️⃣ В конец файла config.php добавляем (у кого уже есть, заменяем) следующий код.
** Перед сохранением файла исправить в тексте значения параметров $ppp = 20 и $tpf = 100 на свои. Где их взять - написано там же в тексте.
*** Если у вас страница /index.php отличается от / и это важно - исключите из кода блок "Корень форума" или закомментируйте его.

Код: Выделить всё

### Барьер для ботов phpBB, версия 5.1. Авторы: Kuskow & AI on Google Search
if ($uri = (string)@$_SERVER['REQUEST_URI']) { # не cli
  if (!@$_COOKIE['checked']) { # не человек в браузере
    $ua = $_SERVER['HTTP_USER_AGENT'] ?? 'python';
    # Невозможный адрес страницы или заведомо плохой бот
    if (preg_match('#sid=|=print|\?start=|(posting|search|memberlist|[um]cp|config|profile)\.php|/adm/#', $uri)
    or preg_match('#ChatGPT|meta-|keys-so|python|Firefox/72#i', $ua)
    or strpos($_SERVER['HTTP_REFERER'] ?? '', '#')) {
      http_response_code(410); die; }

    # Корень форума
    if (substr($_SERVER['SCRIPT_NAME'], -10) === '/index.php') {
      if ($_GET) { http_response_code(410); die; }
      if ($uri[-1] !== '/') { header('Location: ./', true, 301); die; }}

    # Параметры взять из админки: Общие -> Конфигурация -> Размещение сообщений
    $ppp = 20; # количество сообщений на странице темы
    $tpf = 100; # количество тем на странице форума

    # Неправильная пагинация
    if ((int)@$_GET['start'] % (@$_GET['t'] ? $ppp : (@$_GET['f'] ? $tpf : 1))) { http_response_code(410); die; }
                                    
    # p= заменяем на t=&start=
    if (($post_id = (int)@$_GET['p']) 
    and ($conn = @mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport))) {
      $t_posts = $table_prefix . 'posts';
      $res = mysqli_query($conn, "SELECT p1.topic_id, COUNT(p2.post_id) AS older_posts 
        FROM {$t_posts} p1 
        LEFT JOIN {$t_posts} p2 ON p2.topic_id = p1.topic_id AND p2.post_time < p1.post_time AND p2.post_visibility = 1
        WHERE p1.post_id = {$post_id} AND p1.post_visibility = 1
        GROUP BY p1.topic_id");
      if ($data = mysqli_fetch_assoc($res)) {
        $start = intdiv($data['older_posts'], $ppp) * $ppp;
        $url = 'viewtopic.php?t=' . $data['topic_id'] . ($start ? '&start=' . $start : '');
        header('Location: ' . $url, true, 301); die; }
      http_response_code(410); die; }

    # Хороших ботов и новых посетителей объединяем в одном аккаунте без сессии
    $_SERVER['HTTP_USER_AGENT'] = 'Googlebot/'; }

  # Избавляемся от сорных параметров
  if (preg_match('#view(topic|forum)\.php|search\.php|/\?#', $uri)
  and ($newuri = rtrim(str_replace('?&', '?', preg_replace('#&(sid|hilit|[fgy][bcs]+lid|utm_\w+)=[^&]*#', '', str_replace('?', '?&', $uri))), '?&')) !== $uri) {
    header('Location: ' . $newuri, true, 308); die; }
}

3️⃣ Заходим в админку своего phpBB:
3.1. ОБЩИЕ -> Очистить кэш.
3.2. ОБЩИЕ -> Сброс рекорда посещаемости.
Аватара пользователя
angst66
phpBB 3.0.0 RC3
Сообщения: 1580
Стаж: 14 лет 6 месяцев
Благодарил (а): 50 раз
Поблагодарили: 81 раз

Re: Атака китайских ботов

Сообщение angst66 »

Опять ошибка при открытии поиска в админке Illegal use of $_SERVER. You must use the request class to access input data. Found in тут вторая строчка кодаThis error message was generated by deactivated_super_global Изменил ее на if ($uri = (string)@$request->server['REQUEST_URI']) { Ошибка пропала. Не знаю правильно или нет
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 460
Стаж: 10 лет 1 месяц
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 46 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Это из-за того, что при настройках поиска config.php вызывается повторно, а мы на это не рассчитывали. Сейчас напряжём ИИ, пусть думает. Не хочется из-за этого усложнять конструкцию.

Вернуться в «phpBB-пространство»