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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Leo Angel
phpBB 2.0.9
Сообщения: 738
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 241 раз
Поблагодарили: 94 раза

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

Сообщение Leo Angel »

Вечером попробую. Сегодня утром было спокойно, а сейчас набежали демоны! 8-)

Отправлено спустя 8 минут 51 секунду:
max-age=31536000 - срок жизни cookie: 31 536 000 секунд, то есть примерно 1 год с момента установки. Верно?
А что будет через год?
Аватара пользователя
Kuskow
phpBB 2.0.3
Сообщения: 351
Стаж: 9 лет 10 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 25 раз
Поблагодарили: 33 раза

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

Сообщение Kuskow »

Это одноразовая кука, она нужна только для того, чтобы определить, человек ли зашёл на форум, потом в силу вступают обычные куки форума. Можно спокойно поставить 1 час. Но если в течение часа человек не ткнёт ни одну ссылку на странице, то так и останется никем. В общем-то, можно поставить сутки, чтобы не думать об этом. В общем, это время должно быть не меньше, чем реальный человек ткнёт хоть одну ссылку на странице форума. Естественно, он сделает это меньше, чем за год.
phpBB 3.3.15 • Manticore 17.5 • MariaDB 11.4 (2.8 GB) • Redis • PHP 8.3-FPM • Nginx • HestiaCP • Debian 12 • 4GB DDR4 • 60GB NVMe • 2 vCPU 4GHz
Аватара пользователя
Leo Angel
phpBB 2.0.9
Сообщения: 738
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 241 раз
Поблагодарили: 94 раза

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

Сообщение Leo Angel »

Kuskow, сделал всё, что Вы написали.
Форум упал по причине:
Сайт выполнил переадресацию слишком много раз.
Что я сделал не так?
Аватара пользователя
Kuskow
phpBB 2.0.3
Сообщения: 351
Стаж: 9 лет 10 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 25 раз
Поблагодарили: 33 раза

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

Сообщение Kuskow »

В общем, там заменой одной строчки не обошлось. Нужно заменить весь третий блок. Так что, если нужно оставить и /, и /index.php, тогда весь код скрипта будет таким:

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

### Барьер для защиты от ботов, атакующих phpBB-сайты
### Авторы: Kuskow & AI on Google Search
if (PHP_SAPI === 'cli') { return; } // В cli не надо ничего делать
 
# 1. Шлагбаум: извесных ботов не пускаем даже к дому
preg_match('/ChatGPT|keys-so|python|Firefox\/72|Mediapartners/i', $ua = $_SERVER['HTTP_USER_AGENT']) +
preg_match('/wp-|profile\.php/i', $uri = $_SERVER['REQUEST_URI'])
and die(header('HTTP/1.1 403'));
 
# 2. Дебютант: неопознанный бот или первый визит гостя считается как один опознанный бот
empty($_SERVER['HTTP_COOKIE'])
and !preg_match('/Yandex|Googlebot|Applebot|bingbot|Baiduspider|GPTBot/i', $_SERVER['HTTP_USER_AGENT'])
and ($_SERVER['HTTP_USER_AGENT'] = 'Debutante');
 
# 3. Гардероб: разуваем гостей, но не персонал
$noise = 'sid|hilit|gclid|yclid|ysclid|fbclid|utm_\w+';
preg_match('/^(?!.*(adm\/|cp\.php|hash=|mark_)).*?(' . $noise . ')=/i', $uri))
and exit(header('Location: ' . rtrim(preg_replace(["/([?&])($noise)=[^&]*(&|$)/i", '/\?&/'], ['$3', '?'], $uri), '?&'), true, 308));

На своём форуме проверил - работает.
phpBB 3.3.15 • Manticore 17.5 • MariaDB 11.4 (2.8 GB) • Redis • PHP 8.3-FPM • Nginx • HestiaCP • Debian 12 • 4GB DDR4 • 60GB NVMe • 2 vCPU 4GHz
Аватара пользователя
Leo Angel
phpBB 2.0.9
Сообщения: 738
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 241 раз
Поблагодарили: 94 раза

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

Сообщение Leo Angel »

Теперь вот:

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

Ошибка AJAX
Internal Server Error
Отправлено спустя 35 минут 43 секунды:
И форум падает с 500 ошибкой.
Аватара пользователя
Kuskow
phpBB 2.0.3
Сообщения: 351
Стаж: 9 лет 10 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 25 раз
Поблагодарили: 33 раза

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

Сообщение Kuskow »

Leo Angel, у меня AJAX не используется, поэтому не уловил бы эту ошибку. Хорошо, что Вы участвуете в разработке универсального решения. Для совместимости уже всем нужно поменять, себе тоже добавил, чтобы в будущем не думать, почему это AJAX не работает. Вот общая обновлённая версия:

Вариант А: для тех, кому index.php не важен

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

### Барьер для защиты от ботов, атакующих phpBB-сайты
### Авторы: Kuskow & AI on Google Search
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) || PHP_SAPI === 'cli') return; // когда этот скрипт бесполезен

# 1. Шлагбаум: извесных ботов не пускаем даже к дому
preg_match('/ChatGPT|keys-so|python|Firefox\/72/i', $ua = $_SERVER['HTTP_USER_AGENT']) +
preg_match('/wp-|profile\.php/i', $uri = $_SERVER['REQUEST_URI'])
and die(header('HTTP/1.1 403'));

# 2. Дебютант: неопознанный бот или первый визит гостя считается как один опознанный бот
empty($_SERVER['HTTP_COOKIE'])
and !preg_match('/Yandex|Googlebot|Google-|Applebot|bingbot|Baiduspider|GPTBot|whatsapp|telegram|facebook/i', $_SERVER['HTTP_USER_AGENT'])
and ($_SERVER['HTTP_USER_AGENT'] = 'Debutante');

# 3. Гардероб: разуваем гостей, но не персонал
$noise = 'sid|hilit|gclid|yclid|ysclid|fbclid|utm_\w+';
preg_match('/^(?!.*(adm\/|cp\.php|hash=|mark_)).*?(\/index\.php(?:\?|&|$)|(' . $noise . ')=)/i', $uri)
and exit(header('Location: ' . rtrim(preg_replace(["/([?&])($noise)=[^&]*(&|$)/i", '/\?&/', '/\/index\.php(?:\?|&|$)/i'], ['$3', '?', '/'], $uri), '?&'), true, 308));

Вариант Б: для тех, у кого корень / и /index.php - это разные страницы (отличие в 3 блоке)

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

### Барьер для защиты от ботов, атакующих phpBB-сайты
### Авторы: Kuskow & AI on Google Search
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) || PHP_SAPI === 'cli') return; // когда этот скрипт бесполезен

# 1. Шлагбаум: извесных ботов не пускаем даже к дому
preg_match('/ChatGPT|keys-so|python|Firefox\/72/i', $ua = $_SERVER['HTTP_USER_AGENT']) +
preg_match('/wp-|profile\.php/i', $uri = $_SERVER['REQUEST_URI'])
and die(header('HTTP/1.1 403'));

# 2. Дебютант: неопознанный бот или первый визит гостя считается как один опознанный бот
empty($_SERVER['HTTP_COOKIE'])
and !preg_match('/Yandex|Googlebot|Google-|Applebot|bingbot|Baiduspider|GPTBot|whatsapp|telegram|facebook/i', $_SERVER['HTTP_USER_AGENT'])
and ($_SERVER['HTTP_USER_AGENT'] = 'Debutante');

# 3. Гардероб: разуваем гостей, но не персонал
$noise = 'sid|hilit|gclid|yclid|ysclid|fbclid|utm_\w+';
preg_match('/^(?!.*(adm\/|cp\.php|hash=|mark_)).*?(' . $noise . ')=/i', $uri))
and exit(header('Location: ' . rtrim(preg_replace(["/([?&])($noise)=[^&]*(&|$)/i", '/\?&/'], ['$3', '?'], $uri), '?&'), true, 308));
phpBB 3.3.15 • Manticore 17.5 • MariaDB 11.4 (2.8 GB) • Redis • PHP 8.3-FPM • Nginx • HestiaCP • Debian 12 • 4GB DDR4 • 60GB NVMe • 2 vCPU 4GHz
dotez
phpBB 2.0.2
Сообщения: 304
Стаж: 15 лет 4 месяца
Благодарил (а): 3 раза

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

Сообщение dotez »

А для тех у кого форум лежит в-
https://site.ru/phpBB3/
Аватара пользователя
Kuskow
phpBB 2.0.3
Сообщения: 351
Стаж: 9 лет 10 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 25 раз
Поблагодарили: 33 раза

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

Сообщение Kuskow »

Я думаю, можно брать вариант А (без index). Надо пробовать, всего заранее не преусмотреть. Работает - пользуем дальше. Не работает - отключаем (удаляем) только то, что добавили в config.php. Остальное точно никак не мешает.
При установке не забудьтие сделать первые два изменения.
После полной отладки заново соберу все изменения в одну кучу.
phpBB 3.3.15 • Manticore 17.5 • MariaDB 11.4 (2.8 GB) • Redis • PHP 8.3-FPM • Nginx • HestiaCP • Debian 12 • 4GB DDR4 • 60GB NVMe • 2 vCPU 4GHz
Аватара пользователя
Leo Angel
phpBB 2.0.9
Сообщения: 738
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 241 раз
Поблагодарили: 94 раза

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

Сообщение Leo Angel »

Kuskow писал(а): 10.04.2026 4:03 Вариант Б: для тех, у кого корень / и /index.php - это разные страницы (отличие в 3 блоке)
Опять Ошибка 500, форум упал. :(
Аватара пользователя
Kuskow
phpBB 2.0.3
Сообщения: 351
Стаж: 9 лет 10 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 25 раз
Поблагодарили: 33 раза

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

Сообщение Kuskow »

Leo Angel, тогда пока специально для Вас, а про универсальность подумаем после успешного запуска. Но каждая такая правка снижает эффективность антибота, пропуская некоторых из них.

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

### Барьер для защиты от ботов, атакующих phpBB-сайты
### Авторы: Kuskow & AI on Google Search & ChatGPT
if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'GET') return; // когда этот скрипт бесполезен

# 1. Шлагбаум: извесных ботов не пускаем даже к дому
preg_match('/ChatGPT|keys-so|python|Firefox\/72/i', $ua = $_SERVER['HTTP_USER_AGENT']) +
preg_match('/wp-|profile\.php/i', $uri = $_SERVER['REQUEST_URI'])
and die(header('HTTP/1.1 403'));

# 2. Дебютант: неопознанный бот или первый визит гостя считается как один опознанный бот
empty($_SERVER['HTTP_COOKIE'])
and !preg_match('/Yandex|Googlebot|Google-|Applebot|bingbot|Baiduspider|GPTBot|whatsapp|telegram|facebook/i', $_SERVER['HTTP_USER_AGENT'])
and ($_SERVER['HTTP_USER_AGENT'] = 'Debutante');

# 3. Гардероб: разуваем гостей, но не персонал
$noise = 'sid|hilit|gclid|yclid|ysclid|fbclid|utm_\w+';
preg_match('/^(?!.*(adm\/|cp\.php|hash=|mark_)).*?(' . $noise . ')=/i', $uri))
and exit(header('Location: ' . rtrim(preg_replace(["/([?&])($noise)=[^&]*(&|$)/i", '/\?&/'], ['$3', '?'], $uri), '?&'), true, 308));
phpBB 3.3.15 • Manticore 17.5 • MariaDB 11.4 (2.8 GB) • Redis • PHP 8.3-FPM • Nginx • HestiaCP • Debian 12 • 4GB DDR4 • 60GB NVMe • 2 vCPU 4GHz
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5518
Стаж: 21 год 3 месяца
Откуда: Питер
Благодарил (а): 185 раз
Поблагодарили: 773 раза

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

Сообщение Siava »

Кратко о нескольких последних страницах темы :)
Скрытый текст
1430989171_1871837159.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Leo Angel
phpBB 2.0.9
Сообщения: 738
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 241 раз
Поблагодарили: 94 раза

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

Сообщение Leo Angel »

:D

Отправлено спустя 1 час 18 минут 27 секунд:
Kuskow писал(а): 10.04.2026 15:21 Leo Angel, тогда пока специально для Вас
Нет. Опять ошибка 500
Аватара пользователя
Kuskow
phpBB 2.0.3
Сообщения: 351
Стаж: 9 лет 10 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 25 раз
Поблагодарили: 33 раза

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

Сообщение Kuskow »

Ну тут уже моих знаний недостаточно. Мне или включать AJAX на своём сайте, чего очень бы не хотелось, или лезть в чужой сайт, что тоже неправильно.
Можем попробовать ещё наоборот - Вы отключите AJAX в быстром ответе, посмотрим, заработает ли. И будем думать дальше.
phpBB 3.3.15 • Manticore 17.5 • MariaDB 11.4 (2.8 GB) • Redis • PHP 8.3-FPM • Nginx • HestiaCP • Debian 12 • 4GB DDR4 • 60GB NVMe • 2 vCPU 4GHz
Аватара пользователя
Leo Angel
phpBB 2.0.9
Сообщения: 738
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 241 раз
Поблагодарили: 94 раза

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

Сообщение Leo Angel »

Давайте пока сделаем паузу. Я постараюсь понять что именно вызывает 500-ю ошибку у меня. Найду, если пойму и найду, тогда продолжим.
Аватара пользователя
Leo Angel
phpBB 2.0.9
Сообщения: 738
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 241 раз
Поблагодарили: 94 раза

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

Сообщение Leo Angel »

Нашлась ошибка, которая вызывала 500-ю ошибку.
В этой строке

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

preg_match('/^(?!.*(adm\/|cp\.php|hash=|mark_)).*?(' . $noise . ')=/i', $uri))
лишняя закрывающая скобка!
Убрал её и форум перестал падать.
Всё работает.
Как обстоят дела с ботами посмотрю-понаблюдаю-напишу.

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