Атака китайских ботов
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
hd321kbps
- phpBB 2.0.3
- Сообщения: 366
- Стаж: 14 лет 3 месяца
- Откуда: Россия, Крым, Армянск
- Благодарил (а): 191 раз
- Поблагодарили: 346 раз
Атака китайских ботов
Сегодня заметил на нескольких форумах наплыв ботов из китая от 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
Все заходят с телефона 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: Атака китайских ботов
Perfecthus, сейчас реализованы все идеи, некоторые из них ждали 7 лет. Только 2 недели назад я понял, что людей не надо переадресовывать с p= на t=&start=. А потом увидел, как криво это работает на другом популярном форуме и убедился в своём выводе.
Пока нет нереализованных идей. Хорошо бы накопить практическую базу, услышать, у кого что не так. Тогда придёт что-то ещё, наверное.
Ну и результат настолько поражает, что хочется погордиться собой хоть какое-то время.
Пока нет нереализованных идей. Хорошо бы накопить практическую базу, услышать, у кого что не так. Тогда придёт что-то ещё, наверное.
Ну и результат настолько поражает, что хочется погордиться собой хоть какое-то время.
-
Kuskow
- phpBB 2.0.5
- Сообщения: 460
- Стаж: 10 лет 1 месяц
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 29 раз
- Поблагодарили: 46 раз
Re: Атака китайских ботов
Интересно, что день ото дня отличается. Вчера было 780 подсетей вбане, сегодня только 170. То есть, позавчера была атака, а вчера боты взяли выходной или в отпуск ушли, или направились на другие сервера.Kuskow писал(а): 27.06.2026 16:27 Я теперь сделал так. Когда fail2ban обнаруживает 2x444 за две минуты, он банит на сутки не один конкретный адрес, а всю подсеть класса C, то есть, 1.2.3.x. Так что, соседние адреса забанены заранее ещё до того, как начнут лезть на кактус. В бане постоянно около 400 таких подсетей.
-
Shredder
- Former team member
- Сообщения: 2262
- Стаж: 17 лет 7 месяцев
- Благодарил (а): 165 раз
- Поблагодарили: 158 раз
Re: Атака китайских ботов
На 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: Атака китайских ботов
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: Атака китайских ботов
Новая версия 5.1 антибота для тех, у кого нет доступа к настройкам Apache/Nginx. Отсекаются зловредные боты, оптимизируется нагрузка на базу данных за счёт исправления запросов. Проверено и работает на своём форуме (в профиле есть ссылка). Совместимо с PHP 7.4 и 8.x. Если раньше устанавливали этот скрипт, теперь нужно выполнить только пункт 2. Основные отличия от предыдущей версии:
В самое начало файла
* Обязательно повторить это исправление после каждого обновления версии движка, иначе ни один человек на новом устройстве не сможет зайти или зарегистрироваться на форуме.
В конец файла
** Перед сохранением файла исправить в тексте значения параметров
*** Если у вас страница /index.php отличается от / и это важно - исключите из кода блок "Корень форума" или закомментируйте его.
Заходим в админку своего phpBB:
3.1. ОБЩИЕ -> Очистить кэш.
3.2. ОБЩИЕ -> Сброс рекорда посещаемости.
- исправлен блок неправильной пагинации для совместимости с PHP 7.4
- введена обработка корня форума / и переадресация /index.php на корень
- блоки расставлены в логическом эффективном порядке
/assets/javascript/core.js добавляем следующий код (прям первой строкой).* Обязательно повторить это исправление после каждого обновления версии движка, иначе ни один человек на новом устройстве не сможет зайти или зарегистрироваться на форуме.
Код: Выделить всё
document.cookie = "checked=1; path=/; max-age=31104000; SameSite=Lax";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.1. ОБЩИЕ -> Очистить кэш.
3.2. ОБЩИЕ -> Сброс рекорда посещаемости.
-
angst66
- phpBB 3.0.0 RC3
- Сообщения: 1580
- Стаж: 14 лет 6 месяцев
- Благодарил (а): 50 раз
- Поблагодарили: 81 раз
Re: Атака китайских ботов
Опять ошибка при открытии поиска в админке
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: Атака китайских ботов
Это из-за того, что при настройках поиска Sphinx (только)
Пока временно можно сделать так, а потом что-нибудь придумаем ещё. Замените первую строку:
Отправлено спустя 53 минуты 57 секунд:
Нужно ли загромождать этой проверкой основной код? Думаю, что нет. Ведь этот барьер придуман для тех, у кого нет доступа к Apache/Nginx, а если стоит поиск Sphinx, значит и есть доступ к серверу, и можно соорудить что-то посерьёзней. К тому же, чего там делать в настройке поиска ? Один раз настроил - и пусть себе работает. Если даже надо зайти, можно на пару минут и отключить барьер совсем (удалить скрипт из config.php).
config.php вызывается повторно, а мы на это не рассчитывали. Сейчас напряжём ИИ, пусть думает. Не хочется из-за этого усложнять конструкцию.Пока временно можно сделать так, а потом что-нибудь придумаем ещё. Замените первую строку:
Код: Выделить всё
if (is_array($_SERVER) and $uri = (string)@$_SERVER['REQUEST_URI']) { # не cliНужно ли загромождать этой проверкой основной код? Думаю, что нет. Ведь этот барьер придуман для тех, у кого нет доступа к Apache/Nginx, а если стоит поиск Sphinx, значит и есть доступ к серверу, и можно соорудить что-то посерьёзней. К тому же, чего там делать в настройке поиска ? Один раз настроил - и пусть себе работает. Если даже надо зайти, можно на пару минут и отключить барьер совсем (удалить скрипт из config.php).


