Атака китайских ботов
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Да, поэтому меня это не беспокоит. Пусть себе ломятся.
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
- Сообщения: 303
- Стаж: 15 лет 3 месяца
- Благодарил (а): 3 раза
Re: Атака китайских ботов
А ты бы мог сделать простенькое расширение которое в админку бы высвечивало уведомление типа : внимание, аномальные заходы с диапазоне айпи такого то...
(1000 юзеров онлайн за пару минут с одного диапазона)
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Усовершенствовал. Убираем костыли изKuskow писал(а): 22.03.2026 12:58 предлагаю три первых костыля, которые потом можно усовершенствовать
viewtopic.php и viewforum.php, добавляем один общий костыль. В файле common.php в начале находим код:
Код: Выделить всё
if (!defined('IN_PHPBB'))
{
exit;
}
Код: Выделить всё
defined('IN_PHPBB') || exit;
// Если есть sid, но не в админке/ucp/mcp
if (isset($_GET['sid']) && !strpos($_SERVER['SCRIPT_NAME'], 'dm/index.php') && !strpos($_SERVER['SCRIPT_NAME'], 'cp.php')) {
$new_query = ltrim(preg_replace('/(^|&|&)sid=[^&]+(&|$)/i', '$2', $_SERVER['QUERY_STRING']), '&');
header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?') . ($new_query ? '?' . $new_query : ''), true, 301);
exit;
}Этот костыль можно (лучше) оставить:
Kuskow писал(а): 22.03.2026 12:58 В файлеsearch.phpв самом начале находим строкуinclude($phpbb_root_path . 'common.' . $phpEx);и сразу после неё добавляем:Код: Выделить всё
if (empty($_COOKIE)) { header("HTTP/1.1 403 Forbidden"); header("Connection: close"); exit; }
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
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Усовершенствовал. Теперь не нужно ничего менять ни в NGINX, ни в Apache - меняем только один php-файл.
Убираем все предыдущие костыли из .ataccess, viewtopic.php, viewforum.php, search.php, common.php (восстанавливаем исходные версии).
Добавляем один общий костыль - в самом начале файла
И сразу после него добавляем этот фрагмент:
Проверил на живом (не тестовом) форуме - без нареканий. Оставшееся количество ботов не больше числа реальных людей. Форум медленней не стал, так что, можно обойтись без настроек NGINX и Apache, то есть, использовать вообще везде, включая самый ограниченный web-хостинг.
Убираем все предыдущие костыли из .ataccess, viewtopic.php, viewforum.php, search.php, common.php (восстанавливаем исходные версии).
Добавляем один общий костыль - в самом начале файла
common.php находим код:
Код: Выделить всё
if (!defined('IN_PHPBB'))
{
exit;
}И сразу после него добавляем этот фрагмент:
Код: Выделить всё
// Блок 1: Защита от массовых атак ботов
// Страницы, запрашиваемые ботами для наггрузки сервера
$request_uri = $_SERVER['REQUEST_URI'];
$is_suspicious_path = preg_match('/sid=|\?start=|search\.php|app\.php|ucp\.php|posting\.php|memberlist/i', $request_uri);
// Список полезных ботов - расширять не нужно, потому что другим полезным ботам не нужны закрываемые страницы
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$is_good_bot = preg_match('/YandexBot|Googlebot|Applebot|bingbot|GPTBot|whatsapp|telegram|facebookext/i', $user_agent);
// Отшиваем запросившего без cookies
if ($is_suspicious_path && !$is_good_bot && empty($_COOKIE)) { http_response_code(403); exit; }
// Отшиваем нежелательных ботов по User-Agent
if (preg_match('/Python|ChatGPT|Firefox\/72|Mediapartners|keys-so/i', $_SERVER['HTTP_USER_AGENT'])) { http_response_code(403); exit; }
// Блок 2: Удаление SID из URL, кроме админки/ucp/mcp
if (isset($_GET['sid']) && !preg_match('/cp\.php|adm\/|delete_cookies/i', $_SERVER['REQUEST_URI'])) {
$new_query = http_build_query(array_diff_key($_GET, ['sid' => 1, 'hilit' => 1]));
header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?') . ($new_query ? '?' . $new_query : ''), true, 301);
exit;
}
Проверил на живом (не тестовом) форуме - без нареканий. Оставшееся количество ботов не больше числа реальных людей. Форум медленней не стал, так что, можно обойтись без настроек NGINX и Apache, то есть, использовать вообще везде, включая самый ограниченный web-хостинг.
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
- Сообщения: 303
- Стаж: 15 лет 3 месяца
- Благодарил (а): 3 раза
Re: Атака китайских ботов
сейчас буду переходить на этот вариант НО хочу заметить что в первом варианте мои юзеры заметили косяк, что когда они регаются и им приъодит на почту письмо подтвердить регистрацию то они переходят по ссылке и сразу получают отказ сервера.Kuskow писал(а): 25.03.2026 3:48 Проверил на живом (не тестовом) форуме - без нареканий. Оставшееся количество ботов не больше числа реальных людей. Форум медленней не стал, так что, можно обойтись без настроек NGINX и Apache, то есть, использовать вообще везде, включая самый ограниченный web-хостинг.
я предполагаю что регаются они в Браузере а по ссылке из письма переходят в почтовом приложении где сида и куки нету вот и получают отказ.
можно это пофиксить?
говорить всем юзерам мол копируйте ссылку в тот самый браузер из которого захоидили- не очень вариант)
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Да, этот косяк я не смог бы увидеть и проверить. потому что у меня вообще отключено подтверждение e-mail и регистрации. Стоит антиспам CleanTalk, и пользователь сразу после регистрации имеет право писать сообщения. Завтра попробую в этом разобраться. Там, скорей всего, только добавить какое-то слово-исключение рядом с delete_cookies.
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
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Исправил. Посмотрел по своим логам, там ucp.php редко запрашивают боты, можно его и не контролировать.
В самом начале файла
И сразу после него добавляем этот фрагмент:
В самом начале файла
common.php находим код:
Код: Выделить всё
if (!defined('IN_PHPBB'))
{
exit;
}И сразу после него добавляем этот фрагмент:
Код: Выделить всё
// Блок 1: Защита от массовых атак ботов
// Страницы, запрашиваемые ботами для наггрузки сервера
$request_uri = $_SERVER['REQUEST_URI'];
$is_suspicious_path = preg_match('/sid=|\?start=|search\.php|app\.php|posting\.php|memberlist/i', $request_uri);
// Список полезных ботов - расширять не нужно, потому что другим полезным ботам не нужны закрываемые страницы
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$is_good_bot = preg_match('/YandexBot|Googlebot|Applebot|bingbot|GPTBot|whatsapp|telegram|facebookext/i', $user_agent);
// Отшиваем запросившего без cookies
if ($is_suspicious_path && !$is_good_bot && empty($_COOKIE)) { http_response_code(403); exit; }
// Отшиваем нежелательных ботов по User-Agent
if (preg_match('/Python|ChatGPT|Firefox\/72|Mediapartners|keys-so/i', $_SERVER['HTTP_USER_AGENT'])) { http_response_code(403); exit; }
// Блок 2: Удаление SID из URL, кроме админки/ucp/mcp
if (isset($_GET['sid']) && !preg_match('/cp\.php|adm\/|delete_cookies/i', $_SERVER['REQUEST_URI'])) {
$new_query = http_build_query(array_diff_key($_GET, ['sid' => 1, 'hilit' => 1]));
header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?') . ($new_query ? '?' . $new_query : ''), true, 301);
exit;
}
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
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Сегодня внезапно обнаружил, что в панели управления HestiaCP, которая стоит на моём сервере, есть простейшая настройка списков IP-адресов. Скрипт берёт эти списки из известных постоянно обновляемых источников типа Spamhaus и далее можно назначить действие типа заблокировать у себя эти адреса или наоборот разрешить, или заблокировать только конкретные порты. В общем, зря изобретал велосипед, как всегда.
Есть уже готовые скрипты, которые подтягивают регулярно обновляют базу адресов, можно написать/дописать свои. Из готовых есть список из блэклистов и списки по разным странам. Сингапура-Гонконга нет.
Вот её источники чёрных списков:
По странам:

Есть уже готовые скрипты, которые подтягивают регулярно обновляют базу адресов, можно написать/дописать свои. Из готовых есть список из блэклистов и списки по разным странам. Сингапура-Гонконга нет.
Вот её источники чёрных списков:
Код: Выделить всё
https://github.com/trick77/ipset-blacklist/blob/master/ipset-blacklist.conf
https://www.projecthoneypot.org/list_of_ips.php?t=d&rss=1
https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=1.1.1.1
https://danger.rulez.sk/projects/bruteforceblocker/blist.php
https://www.spamhaus.org/drop/drop.lasso
https://cinsscore.com/list/ci-badguys.txt
https://lists.blocklist.de/lists/all.txt
https://blocklist.greensnow.co/greensnow.txt
https://iplists.firehol.org/files/firehol_level1.netset
https://iplists.firehol.org/files/stopforumspam_7d.ipset
https://raw.githubusercontent.com/borestad/blocklist-abuseipdb/refs/heads/main/abuseipdb-s100-30d.ipv4По странам:

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
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Всего лишь на несколько минут заблокировал официальную подсеть Meta 57.141.x.x, которая с User-Agent = "meta-externalhit" чего-то там ковыряла в моём форуме. Всем видно момент блокировки? Потом расскажу, как я её приструнил (если всё получится).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
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
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Я, конечно, не месяц проверял, но даже несколько часов достаточно, чтобы увидеть результат. Работало на живом (не тестовом) форуме с реальными пользователями.
Так вот, меняем этот фаркмент PHP на новую версию:
Радикально изменился блок 2, а именно:
Отправлено спустя 3 минуты 32 секунды:
На аномальные пики
Kuskow писал(а): 26.03.2026 9:57 Исправил. В самом начале файлаcommon.phpнаходим код:И сразу после него добавляем этот фрагмент:Код: Выделить всё
if (!defined('IN_PHPBB')) { exit; }
Так вот, меняем этот фаркмент PHP на новую версию:
Код: Выделить всё
// Блок 1: Защита от массовых атак ботов
// Страницы, запрашиваемые ботами для наггрузки сервера
$request_uri = $_SERVER['REQUEST_URI'];
$is_suspicious_path = preg_match('/sid=|\?start=|search\.php|app\.php|posting\.php|memberlist/i', $request_uri);
// Список полезных ботов - расширять не нужно, потому что другим полезным ботам не нужны закрываемые страницы
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$is_good_bot = preg_match('/YandexBot|Googlebot|Applebot|bingbot|GPTBot|whatsapp|telegram|facebookext/i', $user_agent);
// Отшиваем запросившего без cookies
if ($is_suspicious_path && !$is_good_bot && empty($_COOKIE)) { http_response_code(403); exit; }
// Отшиваем нежелательных ботов по User-Agent
if (preg_match('/Python|ChatGPT|Firefox\/72|Mediapartners|keys-so/i', $_SERVER['HTTP_USER_AGENT'])) { http_response_code(403); exit; }
// БЛОК 2: Удаление sid= и hilit= из URL, кроме админки/ucp/mcp
if (preg_match(
'/^(?!.*(cp\.php|adm\/|delete_cookies)).*' . // исключения
'(sid=|hilit=)/i', // грязи
$_SERVER['REQUEST_URI'])) {
$new_query = http_build_query(array_diff_key($_GET, ['sid' => 1, 'hilit' => 1]));
header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?') . ($new_query ? '?' . $new_query : ''), true, 308);
exit;
}Радикально изменился блок 2, а именно:
- добавил проверку наличия "hilit" в GET-параметрах (именно из-за него доверчивый Facebook/Instagram нагружал форум зловредными запросами);
- Поменял 301 редирект на 308, чтобы при листании темы у пользователей не пропадал текст из окна быстрого ответа, если они его вводили-вводили, а потом отвлеклись на свои дела и cookies протух;
- в услвиях if заменил вызов нескольких функций на одно регулярное выражение и отметил, где добавлять свои подножки (спотыкачи) и исключения.
Отправлено спустя 3 минуты 32 секунды:
На аномальные пики
Bandwidth внимание не обращаем - это резервная копия ежедневно копируется на Google Drive и Яндекс.Диск.У вас нет необходимых прав для просмотра вложений в этом сообщении.
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
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Прошу вашего пардону, но мы тут с искусственным интеллектом Google изобрели ещё один велосипед а-ля Cloudflare на минималках. Он позволит резать больше разных ботов и гарантированно пропускать людей. Код вставлять (прежний менять) там же (в начале common.php после первого if). Это новшество на живом форуме не проверял, потому что у себя реализовал это в NGINX. Если кто-то проверит - напишите, как получилось.
Код: Выделить всё
// Блок 1: Защита от массовых атак ботов
// Страницы, запрашиваемые ботами для нагрузки сервера
$request_uri = $_SERVER['REQUEST_URI'];
$is_suspicious_path = preg_match('/\?p=|sid=|\?start=|search\.php|app\.php|posting\.php|memberlist/i', $request_uri);
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$is_good_bot = preg_match('/YandexBot|Googlebot|Applebot|bingbot|GPTBot|whatsapp|telegram|facebookext/i', $user_agent);
// Отшиваем запросившего без cookies
if ($is_suspicious_path && !$is_good_bot && empty($_COOKIE)) {
setcookie('human', '1', time() + 600, '/; samesite=Lax', '', true, true);
http_response_code(403);
die("<html><head><meta charset='utf-8'></head><body>Если Вы человек, обновите эту страницу - и всё увидите. Такой вот у нас антиспам.</body></html>");
}
// Отшиваем нежелательных ботов по User-Agent
if (preg_match('/Python|ChatGPT|Firefox\/72|Mediapartners|keys-so/i', $_SERVER['HTTP_USER_AGENT'])) { http_response_code(403); exit; }
// Блок 2: Удаление sid= и hilit= из URL, кроме админки/ucp/mcp
if (preg_match(
'/^(?!.*(cp\.php|adm\/|delete_cookies)).*' . // исключения
'(sid=|hilit=)/i', // грязи
$_SERVER['REQUEST_URI'])) {
$new_query = http_build_query(array_diff_key($_GET, ['sid' => 1, 'hilit' => 1]));
header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?') . ($new_query ? '?' . $new_query : ''), true, 308);
exit;
}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
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Из личной переписки:
А для себя я сделал так. На 23:59 поставил в cron группу команд одной строкой (в начале там нужно прописать свой путь к файлу с логами):
И теперь в конце каждых суток мне приходит e-mail с таким текстом:
А уж аномально это или нормально - каждый администратор пусть сам себе решает. Через пару дней надоест - переключит cron на "раз в неделю".
Отправлено спустя 1 час 35 минут 16 секунд:
И ещё - сбросьте счётчик посещаемости в админке. Всё равно, он ничего не показывал, потому что был накручен ботами.
Я в расширениях вообще ничего не понимаю, это для меня слишком тёмный лес. Но если очень надо, можно открыть CahtGPT или Google-ИИ и дать ему такую задачу. Уверен, с пятого захода всё получится.Закачал последний костыль - всё ок.
А могли бы сделать простенькое расширение, чтобы в админ-панели прям на вкладке Общее появлялось сообщение: "Внимание, аномально много посещений из подсети 10.0.0.0/16"?
А для себя я сделал так. На 23:59 поставил в cron группу команд одной строкой (в начале там нужно прописать свой путь к файлу с логами):
Код: Выделить всё
L="/путь_к_логам/имя_файла.log"; echo "TOP-10 403:"; grep " 403 " "$L" | awk '{print $1}' | sort | uniq -c | sort -rn | head -10; echo "TOP-10 308:"; grep " 308 " "$L" | awk '{print $1}' | sort | uniq -c | sort -rn | head -10Код: Выделить всё
TOP-20 403:
409 114.129.130.112
74 85.192.11.20
43 85.192.11.18
39 107.173.182.25
26 109.238.247.83
25 190.92.151.202
22 46.4.233.178
19 89.182.202.59
16 85.192.11.15
11 173.249.255.241
TOP-10 308:
15 171.97.83.144
12 81.95.87.1
7 81.84.86.125
7 184.154.139.43
6 91.185.76.44
6 77.91.198.37
6 77.187.16.190
6 213.87.139.254
5 62.202.182.34
5 57.141.20.13А уж аномально это или нормально - каждый администратор пусть сам себе решает. Через пару дней надоест - переключит cron на "раз в неделю".
Отправлено спустя 1 час 35 минут 16 секунд:
И ещё - сбросьте счётчик посещаемости в админке. Всё равно, он ничего не показывал, потому что был накручен ботами.
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
-
GENERAL
- phpBB 1.0.0
- Сообщения: 2
- Стаж: 8 месяцев
- Благодарил (а): 1 раз
Re: Атака китайских ботов
А я как то не обращал внимание, боты сидять по 100 штук, да и ладно, виртуальный сервер выдерживает, забил ... боялся блокировать, в плане индексации, может полезные боты всётаки, не стал ковырять и выяснять, но интересно, в наличии время чекну
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
100 штук - ладно, но когда их 8000 за пять минут - это уже ненормально.
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
-
Kuskow
- phpBB 2.0.2
- Сообщения: 315
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Мы с Google-ИИ доработали наш антибот для phpBB. Протестировал на живом форуме - зловредные боты отсекаются все, в гостях теперь только люди. Сначала написал для NGINX, там всё отработал, затем переписал на PHP, чтобы все могли себе сделать так же. Вот только в погоне за лаконичностью пришлось использовать функции, которые есть в PHP 8.0 и выше. Так что, со старым PHP если хочется сделать так же, придётся переписывать код. Правильно работать будет только с классическими URL phpBB: f=, t=, p=, но не с переделанными типа /forum2/chapter3.html.
Для установки этот код нужно добавить в конце файла
И очень хотелось бы какой-то критики по любому поводу и контексту.
Для установки этот код нужно добавить в конце файла
config.php, чтобы при обновлении версии форума не думать об этом. Если раньше вставляли в файле common.php, то прежнюю версию оттуда нужно убрать.И очень хотелось бы какой-то критики по любому поводу и контексту.
Код: Выделить всё
### ДОМОФОН+ДРЕНАЖ для защиты от ботов, атакующих phpBB-сайты
### Авторы: Kuskow & AI on Google Search
# 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. Кто-то запросил страницу phpBB без cookie
empty($_SERVER['HTTP_COOKIE'])
# Полезным ботам открыты все двери без дополнительных проверок
and !preg_match('/Yandex|Googlebot|Google-|Applebot|bingbot|Yahoo|Baiduspider|GPTBot|whatsapp|telegram|facebookext|meta-ext/i', $ua)
# Гостей, попавших на index.php, отправляем на главную страницу сайта
and !(str_contains($uri, '/index.php') and exit(header('Location: ./', true, 308)))
# Запросивших главную или тяжёлые страницы, переключаем на домофон
and (str_ends_with($uri, '/') + str_contains($uri, '/?') + preg_match('/index|view|member|search|post|app|ucp|config/i', $_SERVER['SCRIPT_NAME']))
# Домофон через закрытую дверь спрашивает: "Кто там?"
and die(header('HTTP/1.1 403') . '<meta charset=utf-8><h1>Если Вы человек, обновите эту страницу - и всё увидите. Такой вот у нас антиспам.</h1><script>document.cookie="human=1;Path=/;Max-Age=600;SameSite=Lax"</script>');
# 3. Чистка мусора из URL, кроме критических зон
$noise = ['sid', 'hilit', 'gclid', 'yclid', 'ysclid', 'fbclid'];
preg_match('/^(?!.*(cp\.php|adm\/|delete_cookies)).*(' . implode('|', $noise) . ')=/i', $uri)
and exit(header('Location: ' . implode('?', array_filter([strtok($uri, '?'), http_build_query(array_diff_key($_GET, array_flip($noise)))])), 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

