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

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

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

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

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

Kuskow, кроме этой вставки нужно ещё куда-то что-то прописать?
Аватара пользователя
Kuskow
phpBB 2.0.2
Сообщения: 315
Стаж: 9 лет 10 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 23 раза
Поблагодарили: 24 раза

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

Сообщение Kuskow »

Нет, больше нигде ничего не нужно. Лишь бы версия PHP была не меньше 8.0.

И копию базы даже можно не делать - там ничего не меняется.

Сам скрипт никаких данных или файлов не создаёт, не меняет, не удаляет, не переименует. И его в любой момент можно убрать или закомментировать в файле 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
Сообщения: 718
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 236 раз
Поблагодарили: 92 раза

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

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

Поставил код в config.php.
По итогу через час количество онлайн пользователей снизилось с 987 до 21.Остались, судя по всему, действительно только люди и "правильные" боты. Наверное, сейчас уже можно сказать, что то, к чему я стремился (узнать сколько реально посетителей-людей на форуме) свершилось.

Но вылезла ошибка в консоли:
manifest:1 Failed to load resource: the server responded with a status of 403 (Forbidden)
Не знаю, насколько это критично. На работу форума, вроде, никак не влияет.
Аватара пользователя
Kuskow
phpBB 2.0.2
Сообщения: 315
Стаж: 9 лет 10 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 23 раза
Поблагодарили: 24 раза

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

Сообщение Kuskow »

Так это, как раз и правильно. Всем нелюдям теперь скрипт говорит 403, мол, вас тут не ждали, доступ запрещён. Попробуйте открыть любую страницу форума в новом окне в режиме инкогнито - увидите то, что получит новый пользователь, который ни разу не посещал сайт.

И, кстати, какой такой manifest? Разве он есть/был в phpBB? То есть, без моего скрипта phpBB на запрос манифеста выдал бы 404 Not found, а тут выдал 403 Forbidden без нагрузки на PHP и MySQL - хрен редьки не слаще.
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
Сообщения: 718
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 236 раз
Поблагодарили: 92 раза

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

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

Насколько я понял, этот manifest идёт от расширения Browser Push Notifications / Web Push.
Аватара пользователя
Kuskow
phpBB 2.0.2
Сообщения: 315
Стаж: 9 лет 10 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 23 раза
Поблагодарили: 24 раза

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

Сообщение Kuskow »

Его можно включить в исключения (простите за каламбур) рядом со словом 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
Аватара пользователя
Leo Angel
phpBB 2.0.9
Сообщения: 718
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 236 раз
Поблагодарили: 92 раза

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

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

А как это записать правильно?
Аватара пользователя
Kuskow
phpBB 2.0.2
Сообщения: 315
Стаж: 9 лет 10 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 23 раза
Поблагодарили: 24 раза

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

Сообщение Kuskow »

Ой нет, погодите, это не там. Подумаю, как это сделать.

Пока временно попробуйте удалить слово "app|" (с одной вертикальной палкой) в этой строчке:

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

and (str_ends_with($uri, '/') + str_contains($uri, '/?') + preg_match('/index|view|member|search|post|app|ucp|config/i', $_SERVER['SCRIPT_NAME']))
Должно получиться так:

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

and (str_ends_with($uri, '/') + str_contains($uri, '/?') + preg_match('/index|view|member|search|post|ucp|config/i', $_SERVER['SCRIPT_NAME']))
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
Сообщения: 718
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 236 раз
Поблагодарили: 92 раза

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

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

Да. так пропала ошибка.

Отправлено спустя 19 минут 27 секунд:
Сделал проверочную страницу красивой.
Также подправлен синтаксис php.

Теперь ждём гуру, что они скажут про этот способ.
Без имени-1.jpg

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

$human_gate_html = <<<'HTML'
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Проверка — форум</title>
<style>
  * { box-sizing: border-box; }
  body {
    margin: 0;
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px 16px;
    font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    font-size: 16px;
    line-height: 1.5;
    color: #1a1a1a;
    background: linear-gradient(160deg, #e8f4f8 0%, #f5f0e8 50%, #eef2f0 100%);
  }
  .card {
    max-width: 28rem;
    width: 100%;
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 8px 32px rgba(0,0,0,.08), 0 1px 0 rgba(255,255,255,.8) inset;
    padding: 2rem 1.75rem;
    text-align: center;
  }
  .icon { font-size: 2.5rem; line-height: 1; margin-bottom: .75rem; }
  h1 {
    font-size: 1.2rem;
    font-weight: 600;
    margin: 0 0 .75rem;
    line-height: 1.35;
  }
  p {
    margin: 0 0 1.25rem;
    color: #444;
    font-size: .95rem;
  }
  button {
    appearance: none;
    cursor: pointer;
    border: 0;
    border-radius: 8px;
    padding: .65rem 1.4rem;
    font-size: 1rem;
    font-weight: 600;
    color: #fff;
    background: #2d6a6a;
    box-shadow: 0 2px 8px rgba(45,106,106,.35);
  }
  button:hover { background: #245555; }
  button:active { transform: translateY(1px); }
  .hint { margin-top: 1rem; font-size: .8rem; color: #888; }
</style>
</head>
<body>
  <div class="card">
    <div class="icon" aria-hidden="true">&#128737;</div>
    <h1>Если вы человек, обновите страницу — откроется форум.</h1>
    <p>Короткая проверка от автоматического трафика. После обновления всё работает как обычно.</p>
    <button type="button" onclick="location.reload()">Обновить страницу</button>
    <p class="hint">Такой у нас антиспам.</p>
  </div>
  <script>document.cookie="human=1;Path=/;Max-Age=600;SameSite=Lax"</script>
</body>
</html>
HTML
;

### ДОМОФОН+ДРЕНАЖ для защиты от ботов, атакующих phpBB-сайты
### Авторы: Kuskow & AI on Google Search

# 1. Плохим ботам сканирование сайта запрещено
if (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'])) {
	header('HTTP/1.1 403');
	die('');
}

# 2. Кто-то запросил страницу phpBB без cookie
if (empty($_SERVER['HTTP_COOKIE'])
	&& !preg_match('/Yandex|Googlebot|Google-|Applebot|bingbot|Yahoo|Baiduspider|GPTBot|whatsapp|telegram|facebookext|meta-ext/i', $ua)
	&& !(str_contains($uri, '/index.php') && exit(header('Location: ./', true, 308)))
	&& (str_ends_with($uri, '/') + str_contains($uri, '/?') + preg_match('/index|view|member|search|post|ucp|config/i', $_SERVER['SCRIPT_NAME']))) {
	header('HTTP/1.1 403');
	die($human_gate_html);
}

# 3. Чистка мусора из URL, кроме критических зон
$noise = ['sid', 'hilit', 'gclid', 'yclid', 'ysclid', 'fbclid'];
if (preg_match('/^(?!.*(cp\.php|adm\/|delete_cookies)).*(' . implode('|', $noise) . ')=/i', $uri)) {
	exit(header('Location: ' . implode('?', array_filter([strtok($uri, '?'), http_build_query(array_diff_key($_GET, array_flip($noise)))])), true, 308));
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
southklad
phpBB 3.1.0 RC4
Сообщения: 3431
Стаж: 14 лет 2 месяца
Благодарил (а): 704 раза
Поблагодарили: 173 раза

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

Сообщение southklad »

Leo Angel писал(а): Вчера 17:13 Сделал проверочную страницу красивой.
Также подправлен синтаксис php.
А как и что вы именно сделали и где?
Изображение
Аватара пользователя
Leo Angel
phpBB 2.0.9
Сообщения: 718
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 236 раз
Поблагодарили: 92 раза

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

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

Вот:

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

$human_gate_html = <<<'HTML'
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Проверка — форум</title>
<style>
  * { box-sizing: border-box; }
  body {
    margin: 0;
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px 16px;
    font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    font-size: 16px;
    line-height: 1.5;
    color: #1a1a1a;
    background: linear-gradient(160deg, #e8f4f8 0%, #f5f0e8 50%, #eef2f0 100%);
  }
  .card {
    max-width: 28rem;
    width: 100%;
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 8px 32px rgba(0,0,0,.08), 0 1px 0 rgba(255,255,255,.8) inset;
    padding: 2rem 1.75rem;
    text-align: center;
  }
  .icon { font-size: 2.5rem; line-height: 1; margin-bottom: .75rem; }
  h1 {
    font-size: 1.2rem;
    font-weight: 600;
    margin: 0 0 .75rem;
    line-height: 1.35;
  }
  p {
    margin: 0 0 1.25rem;
    color: #444;
    font-size: .95rem;
  }
  button {
    appearance: none;
    cursor: pointer;
    border: 0;
    border-radius: 8px;
    padding: .65rem 1.4rem;
    font-size: 1rem;
    font-weight: 600;
    color: #fff;
    background: #2d6a6a;
    box-shadow: 0 2px 8px rgba(45,106,106,.35);
  }
  button:hover { background: #245555; }
  button:active { transform: translateY(1px); }
  .hint { margin-top: 1rem; font-size: .8rem; color: #888; }
</style>
</head>
<body>
  <div class="card">
    <div class="icon" aria-hidden="true">&#128737;</div>
    <h1>Если вы человек, обновите страницу — откроется форум.</h1>
    <p>Короткая проверка от автоматического трафика. После обновления всё работает как обычно.</p>
    <button type="button" onclick="location.reload()">Обновить страницу</button>
    <p class="hint">Такой у нас антиспам.</p>
  </div>
  <script>document.cookie="human=1;Path=/;Max-Age=600;SameSite=Lax"</script>
</body>
</html>
HTML
;
 
В предыдущем варианте была просто надпись <h1>Если Вы человек, обновите эту страницу - и всё увидите. Такой вот у нас антиспам.</h1>
Мне это не понравилось и переделал.
А ИИ подсказал ещё и улучшения в синтаксисе php. Сравните у меня и тут: Re: Атака китайских ботов
Аватара пользователя
southklad
phpBB 3.1.0 RC4
Сообщения: 3431
Стаж: 14 лет 2 месяца
Благодарил (а): 704 раза
Поблагодарили: 173 раза

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

Сообщение southklad »

Leo Angel, Не совсем понял только понял, куда это все нужно добавить?
Изображение
Аватара пользователя
Leo Angel
phpBB 2.0.9
Сообщения: 718
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 236 раз
Поблагодарили: 92 раза

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

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

southklad, этот код, как писал Kuskow тут Re: Атака китайских ботов нужно добавить в конце файла config.php
Сохраниться и очистить кэш форума.

Публикую ещё раз весь код. Мне помог очень сильно.

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

$human_gate_html = <<<'HTML'
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Проверка — форум</title>
<style>
  * { box-sizing: border-box; }
  body {
    margin: 0;
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px 16px;
    font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    font-size: 16px;
    line-height: 1.5;
    color: #1a1a1a;
    background: linear-gradient(160deg, #e8f4f8 0%, #f5f0e8 50%, #eef2f0 100%);
  }
  .card {
    max-width: 28rem;
    width: 100%;
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 8px 32px rgba(0,0,0,.08), 0 1px 0 rgba(255,255,255,.8) inset;
    padding: 2rem 1.75rem;
    text-align: center;
  }
  .icon { font-size: 2.5rem; line-height: 1; margin-bottom: .75rem; }
  h1 {
    font-size: 1.2rem;
    font-weight: 600;
    margin: 0 0 .75rem;
    line-height: 1.35;
  }
  p {
    margin: 0 0 1.25rem;
    color: #444;
    font-size: .95rem;
  }
  button {
    appearance: none;
    cursor: pointer;
    border: 0;
    border-radius: 8px;
    padding: .65rem 1.4rem;
    font-size: 1rem;
    font-weight: 600;
    color: #fff;
    background: #2d6a6a;
    box-shadow: 0 2px 8px rgba(45,106,106,.35);
  }
  button:hover { background: #245555; }
  button:active { transform: translateY(1px); }
  .hint { margin-top: 1rem; font-size: .8rem; color: #888; }
</style>
</head>
<body>
  <div class="card">
    <div class="icon" aria-hidden="true">&#128737;</div>
    <h1>Если вы человек, обновите страницу — откроется форум.</h1>
    <p>Короткая проверка от автоматического трафика. После обновления всё работает как обычно.</p>
    <button type="button" onclick="location.reload()">Обновить страницу</button>
    <p class="hint">Такой у нас антиспам.</p>
  </div>
  <script>document.cookie="human=1;Path=/;Max-Age=600;SameSite=Lax"</script>
</body>
</html>
HTML
;
 
### ДОМОФОН+ДРЕНАЖ для защиты от ботов, атакующих phpBB-сайты
### Авторы: Kuskow & AI on Google Search
 
# 1. Плохим ботам сканирование сайта запрещено
if (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'])) {
	header('HTTP/1.1 403');
	die('');
}
 
# 2. Кто-то запросил страницу phpBB без cookie
if (empty($_SERVER['HTTP_COOKIE'])
	&& !preg_match('/Yandex|Googlebot|Google-|Applebot|bingbot|Yahoo|Baiduspider|GPTBot|whatsapp|telegram|facebookext|meta-ext/i', $ua)
	&& !(str_contains($uri, '/index.php') && exit(header('Location: ./', true, 308)))
	&& (str_ends_with($uri, '/') + str_contains($uri, '/?') + preg_match('/index|view|member|search|post|ucp|config/i', $_SERVER['SCRIPT_NAME']))) {
	header('HTTP/1.1 403');
	die($human_gate_html);
}
 
# 3. Чистка мусора из URL, кроме критических зон
$noise = ['sid', 'hilit', 'gclid', 'yclid', 'ysclid', 'fbclid'];
if (preg_match('/^(?!.*(cp\.php|adm\/|delete_cookies)).*(' . implode('|', $noise) . ')=/i', $uri)) {
	exit(header('Location: ' . implode('?', array_filter([strtok($uri, '?'), http_build_query(array_diff_key($_GET, array_flip($noise)))])), true, 308));
}
Аватара пользователя
southklad
phpBB 3.1.0 RC4
Сообщения: 3431
Стаж: 14 лет 2 месяца
Благодарил (а): 704 раза
Поблагодарили: 173 раза

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

Сообщение southklad »

Leo Angel, Спасибо, а ваш тоже только для php8? А то у меня 7.4 стоит к сожалению
Изображение
Аватара пользователя
Leo Angel
phpBB 2.0.9
Сообщения: 718
Стаж: 8 лет 2 месяца
Откуда: Израиль
Благодарил (а): 236 раз
Поблагодарили: 92 раза

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

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

Тоже только для php8. Я в общем-то всю логику оставил прежней - отсюда Re: Атака китайских ботов
Я только изменил страницу "домофона".

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