Антикракен, антиказино и т.д.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение

-
- phpBB 3.1.0 RC3
- Сообщения: 3395
- Стаж: 13 лет 8 месяцев
- Благодарил (а): 696 раз
- Поблагодарили: 171 раз
Re: Антикракен, антиказино и т.д.
Вчера только, смотрю создана тема, 1 и в тексте 1 и все.Странно думаю, смотрю, а ранее она как раз казино и тд называлась, не смогли обойти и переименовали тему, чтобы не палиться
-
- phpBB 2.0.18
- Сообщения: 1185
- Стаж: 14 лет 6 месяцев
- Благодарил (а): 210 раз
- Поблагодарили: 76 раз
Re: Антикракен, антиказино и т.д.
Да, у меня тоже так поначалу делали, я, как установил это расширение забыл о спаме:)
Но конечно, надо бы админку сделать для оперативности, но у меня сейчас другая напасть - "плавные" боты, которые делают так, чтобы сервак отключил хостер от нагрузки. Смекнули, что ддос не помогает, решили так действовать.
Но конечно, надо бы админку сделать для оперативности, но у меня сейчас другая напасть - "плавные" боты, которые делают так, чтобы сервак отключил хостер от нагрузки. Смекнули, что ддос не помогает, решили так действовать.
-
- phpBB 3.1.0 RC3
- Сообщения: 3395
- Стаж: 13 лет 8 месяцев
- Благодарил (а): 696 раз
- Поблагодарили: 171 раз
Re: Антикракен, антиказино и т.д.
Меня сегодня так же снова долбили, вчера фигачил так , причем с одного IP. Сегодня гостей разово было 1362, новый рекорд от ботов за разовое посещение. После блокировки пары IP подсетей отвалили.
Код: Выделить всё
89.36.32.231 - - [26/Aug/2025:14:14:02 +0300] "GET /tulbar/city_strany?asl_gen[]=content&customset[]=post&filters_changed=0&filters_initial=1&qtranslate_lang=%40%40lmalX HTTP/1.1" 403 177
-
- phpBB 3.1.0 RC3
- Сообщения: 3395
- Стаж: 13 лет 8 месяцев
- Благодарил (а): 696 раз
- Поблагодарили: 171 раз
Re: Антикракен, антиказино и т.д.
Ну у меня и блокировка на сервере и на форуме, но не справляются они все равно.
-
- phpBB 1.4.3
- Сообщения: 82
- Стаж: 21 год 3 месяца
- Откуда: Москва
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Re: Антикракен, антиказино и т.д.
Аналогично. Получается спортивный интерес или личная неприязнь к сайту, зачем на это время тереть когда в сети кучу других сайтов и форумов.er107 писал(а): 28.08.2025 14:31 Но конечно, надо бы админку сделать для оперативности, но у меня сейчас другая напасть - "плавные" боты, которые делают так, чтобы сервак отключил хостер от нагрузки. Смекнули, что ддос не помогает, решили так действовать.
С уважением, Дмитрий.
-
- phpBB 2.0.18
- Сообщения: 1185
- Стаж: 14 лет 6 месяцев
- Благодарил (а): 210 раз
- Поблагодарили: 76 раз
Re: Антикракен, антиказино и т.д.
В дефолтном черном списке расширения нет слова , там написано только , надо в черный список добавить и .
Чтобы расширение блокировало слова на любой раскладке (при наличии в черном списке стоп-слов только на одной раскладке), надо расширение подкорректировать, а сейчас, для оперативности, надо добавлять слова которые проходят, в черный список.
Код: Выделить всё
casino
Код: Выделить всё
azino
Код: Выделить всё
casino
Чтобы расширение блокировало слова на любой раскладке (при наличии в черном списке стоп-слов только на одной раскладке), надо расширение подкорректировать, а сейчас, для оперативности, надо добавлять слова которые проходят, в черный список.
-
- phpBB 3.1.0 RC3
- Сообщения: 3395
- Стаж: 13 лет 8 месяцев
- Благодарил (а): 696 раз
- Поблагодарили: 171 раз
Re: Антикракен, антиказино и т.д.
Расширение полезное, но как бы убрать срабатывания для обычных пользователей.
Была проблема с отправкой темы еще у одного пользователя, и я в упор не нашел там ни одного запрещенного слова, но отправка блокировалась.

-
- phpBB 2.0.18
- Сообщения: 1185
- Стаж: 14 лет 6 месяцев
- Благодарил (а): 210 раз
- Поблагодарили: 76 раз
Re: Антикракен, антиказино и т.д.
Спамеры тоже обычные пользователи, тут, наверное, надо отключать проверку, если у юзера больше N сообщений на форуме? Или как?
-
- phpBB 3.1.0 RC3
- Сообщения: 3395
- Стаж: 13 лет 8 месяцев
- Благодарил (а): 696 раз
- Поблагодарили: 171 раз
Re: Антикракен, антиказино и т.д.
Тоже про это думал, потому что я как админ сам столкнулся с таким действием.
-
- phpBB 2.0.18
- Сообщения: 1185
- Стаж: 14 лет 6 месяцев
- Благодарил (а): 210 раз
- Поблагодарили: 76 раз
Re: Антикракен, антиказино и т.д.
Админу можно антиспам вообще тогда отключить, надо подумать, в общем.
-
- phpBB 2.0.18
- Сообщения: 1185
- Стаж: 14 лет 6 месяцев
- Благодарил (а): 210 раз
- Поблагодарили: 76 раз
Re: Антикракен, антиказино и т.д.
Расширение обновлено до версии 1.0.5
Исправлена работа с белым списком. (была некорректная обработка слов в предыдущих версиях)
Упрощена функция get_default_patterns() теперь можно вписывать стоп-слова прямо в код расширения:
а не их регулярки (на тот случай, если файл blacklist.txt будет не обнаружен на сервере или окажется пуст).
Оптимизирован код расширения.
Исправлена работа с белым списком. (была некорректная обработка слов в предыдущих версиях)
Упрощена функция get_default_patterns() теперь можно вписывать стоп-слова прямо в код расширения:
Код: Выделить всё
$default_words = ['кракен', 'casino', 'azino', '1xbet'];
Оптимизирован код расширения.
-
- phpBB 3.1.0 RC3
- Сообщения: 3395
- Стаж: 13 лет 8 месяцев
- Благодарил (а): 696 раз
- Поблагодарили: 171 раз
Re: Антикракен, антиказино и т.д.
Приветствую, пытаюсь ввести не слово, а номер телефона с пробелами задолбали попрошайки спамеры, но расширение данный код не обрабатывает.
Отправлено спустя 15 минут 50 секунд:
Вроде помогло вот такое решение: в main_listener.php
было
стало
Насколько верное поправьте.
Код: Выделить всё
8 (952) 133-65-10
Отправлено спустя 15 минут 50 секунд:
Вроде помогло вот такое решение: в main_listener.php
было
Код: Выделить всё
if (preg_match($pattern, $text_cleaned)) {
Код: Выделить всё
if (preg_match($pattern, $text_lower) || preg_match($pattern, $text_cleaned)) {
-
- phpBB 3.1.0 RC3
- Сообщения: 3395
- Стаж: 13 лет 8 месяцев
- Благодарил (а): 696 раз
- Поблагодарили: 171 раз
Re: Антикракен, антиказино и т.д.
Нейросеть подсказала такой вариант, работает, может кто подскажет верный ли код? в в main_listener.php
Код: Выделить всё
<?php
namespace chatgpt\antikraken\event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use phpbb\user;
use phpbb\request\request_interface;
class main_listener implements EventSubscriberInterface
{
protected $user;
protected $request;
protected $phpbb_root_path;
protected $patterns;
protected $whitelist;
protected $phone_patterns;
// Режим проверки: true - ищем любое вхождения стоп-слова в составное слово и блокируем его (в этом случае и вулкан и вулканология заблокируются), false - ищем только целые слова (в этом случае вулкан заблокируется, а вулканология нет).
protected $aggressive_mode = true;
public function __construct(user $user, request_interface $request, $phpbb_root_path)
{
$this->user = $user;
$this->request = $request;
$this->phpbb_root_path = $phpbb_root_path;
$this->user->add_lang_ext('chatgpt/antikraken', 'common');
$this->whitelist = $this->load_word_list($phpbb_root_path . 'ext/chatgpt/antikraken/whitelist.txt');
$this->patterns = $this->load_blacklist_patterns($phpbb_root_path . 'ext/chatgpt/antikraken/blacklist.txt');
$this->phone_patterns = $this->load_phone_patterns();
}
protected function load_word_list($file_path)
{
$words = [];
if (file_exists($file_path) && is_readable($file_path)) {
$lines = file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
$line = trim($line);
if (!empty($line) && strpos($line, '#') !== 0) {
$words[] = mb_strtolower($line);
}
}
}
return $words;
}
protected function load_blacklist_patterns($file_path)
{
$patterns = [];
$blacklist_words = $this->load_word_list($file_path);
foreach ($blacklist_words as $word) {
$pattern = $this->convert_word_to_pattern($word);
if ($pattern) {
$patterns[] = $pattern;
}
}
if (empty($patterns)) {
$patterns = $this->get_default_patterns();
}
return $patterns;
}
protected function get_default_patterns()
{
// Используем convert_word_to_pattern для автоматической генерации
$default_words = ['кракен', 'casino', 'azino', '1xbet'];
$patterns = [];
foreach ($default_words as $word) {
$pattern = $this->convert_word_to_pattern($word);
if ($pattern) {
$patterns[] = $pattern;
}
}
return $patterns;
}
// НОВЫЙ МЕТОД: Загрузка паттернов для номеров телефонов
protected function load_phone_patterns()
{
return [
// Паттерны для российских номеров (8, +7)
'/8[\s\-\(\)\.]*9[\s\-\(\)\.]*5[\s\-\(\)\.]*2[\s\-\(\)\.]*1[\s\-\(\)\.]*3[\s\-\(\)\.]*3[\s\-\(\)\.]*6[\s\-\(\)\.]*5[\s\-\(\)\.]*1[\s\-\(\)\.]*0/iu',
'/8[\s\-\(\)\.]*9[\s\-\(\)\.]*5[\s\-\(\)\.]*2[\s\-\(\)\.]*1[\s\-\(\)\.]*3[\s\-\(\)\.]*3/iu', // Первые 7 цифр
'/8[\s\-\(\)\.]*9[\s\-\(\)\.]*5[\s\-\(\)\.]*2/iu', // Первые 3 цифры
// Общие паттерны для любых номеров
'/\b8[\s\-\(\)\.]*9[\s\-\(\)\.]*5[\s\-\(\)\.]*2[\s\-\(\)\.]*\d[\s\-\(\)\.]*\d[\s\-\(\)\.]*\d[\s\-\(\)\.]*\d[\s\-\(\)\.]*\d[\s\-\(\)\.]*\d\b/iu',
'/\b\+?7[\s\-\(\)\.]*9[\s\-\(\)\.]*5[\s\-\(\)\.]*2[\s\-\(\)\.]*\d[\s\-\(\)\.]*\d[\s\-\(\)\.]*\d[\s\-\(\)\.]*\d[\s\-\(\)\.]*\d[\s\-\(\)\.]*\d\b/iu',
// Паттерн для любых номеров начинающихся с 8952 (более агрессивный)
'/\b(8|\+?7)[\s\-\(\)\.]*(9[\s\-\(\)\.]*5[\s\-\(\)\.]*2)[\s\-\(\)\.]*\d{2,7}/iu'
];
}
protected function convert_word_to_pattern($word)
{
if (empty($word) || in_array(mb_strtolower($word), $this->whitelist)) {
return false;
}
$pattern = '';
$chars = preg_split('//u', mb_strtolower($word), -1, PREG_SPLIT_NO_EMPTY);
foreach ($chars as $char) {
$variants = $this->get_char_variants($char);
$pattern .= '[' . implode('', $variants) . ']';
}
return $this->aggressive_mode
? '/' . $pattern . '/iu'
: '/\b' . $pattern . '\b/iu';
}
protected function get_char_variants($char)
{
$map = [
'а' => 'аa@', 'б' => 'бb', 'в' => 'вvw', 'г' => 'гg', 'д' => 'дd',
'е' => 'еe€ё', 'ё' => 'ёеe', 'ж' => 'жzh', 'з' => 'зz3', 'и' => 'иi1',
'й' => 'йy', 'к' => 'кk', 'л' => 'лl', 'м' => 'мm', 'н' => 'нn',
'о' => 'оo0', 'п' => 'пp', 'р' => 'рrp', 'с' => 'сcs$', 'т' => 'тt',
'у' => 'уyu', 'ф' => 'фf', 'х' => 'хxh', 'ц' => 'цc', 'ч' => 'чch',
'ш' => 'шsh', 'щ' => 'щsch', 'ъ' => 'ъ', 'ы' => 'ыy', 'ь' => 'ь',
'э' => 'эe', 'ю' => 'юyu', 'я' => 'яya',
'a' => 'aа@', 'b' => 'bб', 'c' => 'cс', 'd' => 'dд', 'e' => 'eеё€',
'f' => 'fф', 'g' => 'gг', 'h' => 'hх', 'i' => 'iи1', 'j' => 'jж',
'k' => 'kк', 'l' => 'lл', 'm' => 'mм', 'n' => 'nн', 'o' => 'oо0',
'p' => 'pр', 'q' => 'qк', 'r' => 'rр', 's' => 'sс$', 't' => 'tт',
'u' => 'uу', 'v' => 'vв', 'w' => 'wв', 'x' => 'xх', 'y' => 'yуйы',
'z' => 'zз', '0' => '0о', '1' => '1иi', '2' => '2', '3' => '3з',
'4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8',
'9' => '9', '$' => '\$sс', '@' => '@а', '.' => '\.'
];
foreach ($map as $key => $variants) {
if (mb_strpos($variants, $char) !== false) {
return array_map(function ($c) {
return preg_quote($c, '/');
}, str_split($variants));
}
}
return [preg_quote($char, '/')];
}
public static function getSubscribedEvents()
{
return [
'core.posting_modify_submit_post_before' => 'check_forbidden_words',
];
}
public function check_forbidden_words($event)
{
$text = $this->prepare_text_to_check($event);
$text_lower = mb_strtolower($text);
// Сначала проверка белого списка по ОРИГИНАЛЬНОМУ тексту
foreach ($this->whitelist as $word) {
if (preg_match('/\b' . preg_quote($word, '/') . '\b/iu', $text_lower)) {
return;
}
}
// Два варианта проверки для черного списка:
// 1. Оригинальный текст (для слов с пробелами и символами)
// 2. Очищенный текст (для слитных слов)
$text_cleaned = preg_replace('/[^a-zа-яё0-9]+/iu', '', $text_lower);
// Проверка обычных запрещенных слов
foreach ($this->patterns as $pattern) {
if (preg_match($pattern, $text_lower) || preg_match($pattern, $text_cleaned)) {
trigger_error($this->user->lang['ANTI_KRAKEN_BLOCKED']);
}
}
// НОВАЯ ПРОВЕРКА: Проверка номеров телефонов
foreach ($this->phone_patterns as $pattern) {
if (preg_match($pattern, $text_lower)) {
trigger_error($this->user->lang['ANTI_KRAKEN_BLOCKED']);
}
}
}
protected function prepare_text_to_check($event)
{
$message = $event['data']['message'] ?? '';
$subject = $event['data']['post_subject'] ?? '';
if (empty($subject)) {
$subject = $this->request->variable('subject', '', true);
}
$combined = $message . ' ' . $subject;
return $this->remove_invisible_chars($combined);
}
protected function remove_invisible_chars($text)
{
return preg_replace('/[\x{00AD}\x{034F}\x{061C}\x{115F}-\x{1160}\x{17B4}-\x{17B5}\x{180B}-\x{180E}\x{200B}-\x{200F}\x{2028}-\x{202F}\x{205F}-\x{206F}\x{FE00}-\x{FE0F}\x{FEFF}\x{FFA0}\x{1BCA0}-\x{1BCA3}\x{1D173}-\x{1D17A}\x{E0000}-\x{E0FFF}]/u', '', $text);
}
}