XF 2.2 Борьба со спамом

Версия XenForo
2.2.13

Akvas

Проверенные
Сообщения
79
Реакции
30
Баллы
8,115
Всем привет!
Кто как борется со спамом? Где-то недели полторы-две одолевают спамеры и консервы:
1744647447088.png

Стояли несколько лет вопрос-ответ (периодически менял), но теперь это не работает. Включил гугл-капчу, все равно регаются. Пока включил ручное одобрение + увеличил сроки по хранению ip для сравнения учеток, чтобы проще банить сразу было.
В первую их атаку вовремя зашел на форум, буквально за несколько минут наспамили ссылками на запрещенку около тысячи сообщений, но благо быстро сообразил, что надо лимиты сообщений добавить, чтобы кнопка "спам" снова появилась под сообщениями для быстрой чистки.

п.с. не поленился и зарегался на стопфоруме и добавил api-ключ, чтобы помогать обновлять спам-лист для всех
 
Последнее редактирование:
проверка на спам стоит для тех, у кого менее 30 сообщений. А эти клоуны за ночь могут и больше написать, и мало того, что они уходят в группу "проверенные", так еще и эту проверку на 30 сообщений обходят максимально тупым методом: просто и тупо создают темы
 
oljarose, объясняю, первое сообщение попадает в ожидание на одобрение, но почему то они все равно могут создать вторую тему, и еще одну, и так раз 20, пока я сплю или занят. А потом я захожу на форум, и разумеется помечаю как спам, и все удаляется. Я не понимаю, почему форум разрешает им писать дальше, как это исправить?
Так не должно быть. Если хоть одно сообщение не одобрено, значит счётчик сообщений должен оставаться нулём.
Возможно, у вас неправильно настроены права групп — они конфликтуют между собой и пропускают сообщения.
У меня так что-то подобное когда-то было с правам групп.
 
Так не должно быть. Если хоть одно сообщение не одобрено, значит счётчик сообщений должен оставаться нулём
уже звучит логично, значит счетчик останавливается, и спамер никак не получит группу "проверенные". Проверю этот момент, как придет еще один бот на форум, спасибо

А никак нельзя в целом запретить спамерам темы плодить? Он же получается сможет создать с десяток тем на тему "какая прекрасная погода", счетчик увеличится, он перейдет в группу проверенные, и начнет уже писать свои ссылки. И это все он сделает в пределах часа.
А если запретить не проверенным создавать много тем, то это должно решить проблему. Но я никак не могу найти, где это делается, не уж то нет такого функционала? Xenforo 2.2
 
А если запретить не проверенным создавать много тем, то это должно решить проблему. Но я никак не могу найти, где это делается, не уж то нет такого функционала? Xenforo 2.2
Нельзя запретить публиковать сообщения больше какого-то числа. Иначе, как кто-либо перейдёт в следующую группу!?

Я думала, возможно, есть ограничение интервала публикации постов по времени, но, к сожалению, нашла только ограничение интервала времени на редактирование.
1757357116803.png

Может, есть какой-то аддон для такого ограничения. 🤔
 
SKAJIbnEJIb, запретить стандартной группе создавать темы вообще. Выставить кулдаун в 5 минут на проверке флуда (admin.php?options/groups/messageOptions/#floodCheckLength)для того чтобы уменьшить кол-во мусора. Отжать права на редактирование\урезать правами время на редактирование сообщения.
 
Нельзя запретить публиковать сообщения больше какого-то числа. Иначе, как кто-либо перейдёт в следующую группу!?
идея была, что юзер создает тему, но только одну, пока она не закроется он не может создавать новые темы, пока он в начальной группе. Но видимо да, если только плагин какой то есть...

нашла только ограничение интервала времени на редактирование
там есть в правах группы настройка "отключить проверку на флуд" или как то так
я всем группам эту настройку активировал, а начальной группе оставил проверку
а уже в настройках сообщений, для всех, сделал время между сообщениями 5 минут
думал такая тема отлично сработает, но бот просто ждет эти 5 минут, чтобы снова написать сообщение

запретить стандартной группе создавать темы вообще
никак нельзя, иначе обычные юзеры начнут задавать вопросы в других темах, и начнется бардак. Хотелось бы в борьбе со спамом, не доставлять неудобства обычным юзерам на столько, на сколько это возможно


как вариант, можно при обнаружении слов из черного списка, сразу банить, но я боюсь будут ложные детекты
 
как вариант, можно при обнаружении слов из черного списка, сразу банить, но я боюсь будут ложные детекты
я спамеров отлавливаю по фразам в сообщении которые им требуются обязательно (например кракен) ну и регулярные выражения там то же можно прописать если в слове кракен часть русских букв подменят на английские или наоборот
/admin.php?options/groups/spam/ спам-фразы

Тему почитал, это давным давно обсуждалось!
 
Последнее редактирование:
Регулярное выражение по поиску кракена русскими буквами, английскими буквами, с заменой русских букв на английские в произвольном порядке, заглавными строчными.
Найдёт:
K-R-A-K-E-N
к*r*a*k*e*n
K_р_A_к_E_н
K !@# R %^& A - K ( E ) N
И все комбинации с любыми не буквенно цифровыми символами.

Код:
/[КKkк][^a-zA-Zа-яА-Я0-9]*[РRrр][^a-zA-Zа-яА-Я0-9]*[АAaа][^a-zA-Zа-яА-Я0-9]*[КKkк][^a-zA-Zа-яА-Я0-9]*[ЕEeе][^a-zA-Zа-яА-Я0-9]*[НNnн]/ui

Снимок экрана 2025-09-09 142235.png
 
Регулярное выражение по поиску кракена русскими буквами, английскими буквами, с заменой русских букв на английские в произвольном порядке, заглавными строчными.
Найдёт:
K-R-A-K-E-N
к*r*a*k*e*n
K_р_A_к_E_н
K !@# R %^& A - K ( E ) N
И все комбинации с любыми не буквенно цифровыми символами.

Код:
/[КKkк][^a-zA-Zа-яА-Я0-9]*[РRrр][^a-zA-Zа-яА-Я0-9]*[АAaа][^a-zA-Zа-яА-Я0-9]*[КKkк][^a-zA-Zа-яА-Я0-9]*[ЕEeе][^a-zA-Zа-яА-Я0-9]*[НNnн]/ui

Посмотреть вложение 159518
По идее, потенциально могут unicode символами обходить регулярку. ķŘą и тд. UPD: Одного юникод символа достаточно. Так что помогать будет какое-то время, пока не додумаются
 
Последнее редактирование:
  • Мне нравится
Реакции: akok
По идее, потенциально могут unicode символами обходить регулярку. ķŘą и тд
Со временем так наверное и начнут делать, тем более регулярное выражение "запалил"!
Эти прекрасные парни читают такие темы!?
Но пока отлавливает всё, дальше видно будет!
 
Последнее редактирование:
  • Мне нравится
Реакции: akok
По идее, потенциально могут unicode символами обходить регулярку. ķŘą и тд. UPD
Код:
/[КKΚKкκĶḲḴƘǨᴋꞢꞣ][\s\W]*[РRΡRрρŔŖŘȐȒṘṚṜṞʁᴦꝚꞂꞃ][\s\W]*[АAΑаaαÀÁÂÃÄÅĀĂĄǍȀȂȦḀẠẢẤẦẨẪẬẮẰẲẴẶᾸᾹᾺΆᾼ₳@][\s\W]*[КKΚKкκĶḲḴƘǨᴋꞢꞣ][\s\W]*[ЕEΕеeεÈÉÊËĒĔĖĘĚȄȆȨḔḖḘḚḜẸẺẼẾỀỂỄỆᴇ][\s\W]*[НNΝНнnνÑŃŅŇǸȠṊṈṆṄƝNJNjnjᴎꞐꞑ]/ui

решил не ждать
unicode то же отлавливает
 
Последнее редактирование:
zero69rus, увы, у меня форум под cloudflare, и теперь РФ юзеры вынуждены использовать vpn. А кто то другой не выключает VPN, так как это уже ежедневная необходимость. А кто то из спамеров не использует VPN прокси, а работает с проксями мобильными или домашними, под видом обычного юзера. Боюсь это не решение.
 
zero69rus, увы, у меня форум под cloudflare, и теперь РФ юзеры вынуждены использовать vpn. А кто то другой не выключает VPN, так как это уже ежедневная необходимость. А кто то из спамеров не использует VPN прокси, а работает с проксями мобильными или домашними, под видом обычного юзера. Боюсь это не решение.
Кому как, я допустим делаю сайт для пользователей из РФ, хостинг находится тоже в РФ и стараюсь делать так чтобы было удобно моей аудитории, поэтому cloudflare к сожалению либо использую как капчу либо вообще отказываюсь так как он жутко тормозит Российские айпи.
 
Все спамеры используют vpn, делаем скрипт детектор использования прокси и vpn, и все работает. Я с Hope поделился в лс. Если пожелает разместит для всех.
Какое отношение Hope имеет к этому форуму? Он его давно продал и не посещает
 
Последнее редактирование:
Тогда с вашего позволения сам поделюсь, вставлять в PAGE_CONTAINER перед </body>,
Как работает скрипт детектора VPN

Этот скрипт помогает определить, использует ли посетитель сайта VPN, прокси или анонимайзер (например, Tor).
Он не может узнать это на 100%, потому что браузер не даёт прямой информации о типе подключения.
Вместо этого он анализирует несколько косвенных признаков и делает вывод на основе комбинации данных.


Скрипт отправляет запрос к публичному сервису ipapi.co, который определяет:
- IP-адрес пользователя,
- Страну,
- Провайдера (организацию, которой принадлежит IP).

Например, если провайдер указан как "Amazon AWS" или "DigitalOcean", это уже подозрительно — такие компании предоставляют VPS-серверы, которые часто используют для запуска VPN.

Какие провайдеры считаются подозрительными?
В скрипте есть список слов, которые часто встречаются у хостингов и VPN-сервисов:
- vpn, proxy, tor
- cloud, hosting, vps
- aws, amazon, google cloud, azure
- digitalocean, linode, vultr
- nord, expressvpn, proton, surfshark и другие

Если в названии провайдера встречается любое из этих слов — система считает, что это может быть VPN.

Почему важна страна?
Некоторые страны — популярные места для размещения серверов:
- США (US)
- Нидерланды (NL)
- Германия (DE)
- Канада (CA)
- Великобритания (GB)

Если пользователь говорит, что он из России, но его IP — из Нидерландов, это вызывает подозрение. Особенно если провайдер — хостинговая компания.

Скрипт использует WebRTC
WebRTC — это технология, которая позволяет браузеру обмениваться данными напрямую (например, в Zoom или Telegram Web).
Через неё можно узнать не только публичный IP, но и локальный (например, 192.168.1.5).

Обычные пользователи: WebRTC работает → видны локальные IP.
Пользователи с защитой: WebRTC отключён → локальные IP не показываются.

Если WebRTC "молчит", а IP из США — это сильный признак использования анонимайзера.

По каким правилам принимается решение?
Скрипт блокирует доступ, если выполняется одно из условий:
- Провайдер содержит подозрительное слово (например, "AWS").
ИЛИ
- Страна — рискованная (например, США), И WebRTC не показал локальных IP.

Такая комбинация сильно повышает вероятность, что перед нами — не обычный пользователь, а бот, спамер или человек через VPS.

Что происходит при обнаружении?
Показывается простое модальное окно:
> Обнаружен VPN
> Пожалуйста, отключите его и обновите страницу.

Пока пользователь не отключит VPN, окно будет появляться снова.

Ограничения скрипта
- Не работает, если ipapi.co заблокирован (например, в некоторых сетях или странах).
- Может пропустить VPN, если провайдер не в списке и WebRTC работает.
- Не видит все типы прокси (особенно HTTP/HTTPS).
- Не проверяет серверную сторону — всё происходит в браузере.

Зачем это нужно на форуме?
Чтобы снизить количество спам-регистраций. Многие боты и спамеры работают через дешёвые VPS (AWS, DigitalOcean) и маскируются под обычных пользователей. Этот скрипт отсекает большую часть таких попыток.






Скрипт не идеален, но он эффективно отсеивает большинство очевидных случаев использования VPN, особенно среди спамеров и ботов.
JavaScript:
<script>
  (function () {
    if (window.VPNWidgetLoaded) return;
    window.VPNWidgetLoaded = true;

 
    const suspiciousKeywords = [
      'vpn', 'proxy', 'tor', 'hosting', 'vps', 'cloud', 'digitalocean',
      'aws', 'amazon', 'google cloud', 'azure', 'linode', 'vultr',
      'nord', 'expressvpn', 'surfshark', 'cyberghost', 'proton',
      'hide.me', 'scaleway', 'server', 'data center', 'colo'
    ];

 
    const highRiskCountries = ['US', 'NL', 'DE', 'CA', 'GB', 'SG', 'FR', 'CH'];

   
    function showSimpleDialog() {
      const overlay = document.createElement('div');
      overlay.style.cssText = `
        position: fixed;
        top: 0; left: 0;
        width: 100%; height: 100%;
        background: rgba(0, 0, 0, 0.7);
        display: flex;
        justify-content: center;
        align-items: center;
        z-index: 99999;
        font-family: Arial, sans-serif;
      `;

      const dialog = document.createElement('div');
      dialog.style.cssText = `
        background: white;
        padding: 30px;
        border-radius: 12px;
        box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
        max-width: 400px;
        text-align: center;
      `;

      dialog.innerHTML = `
        <h2 style="margin: 0 0 15px 0; color: #333;">Обнаружено использование VPN</h2>
        <p style="margin: 0 0 20px 0; color: #666; line-height: 1.5;">
          Для корректной работы сайта требуется отключить VPN или прокси-сервер.
          Пожалуйста, отключите их и обновите страницу.
        </p>
        <button style="
          background: #4CAF50;
          color: white;
          border: none;
          padding: 12px 24px;
          border-radius: 6px;
          cursor: pointer;
          font-size: 16px;
        ">
          Обновить страницу
        </button>
      `;

      overlay.appendChild(dialog);
      document.body.appendChild(overlay);

   
      const button = dialog.querySelector('button');
      button.onclick = function() {
        location.reload();
      };

   
      overlay.onclick = function(e) {
        if (e.target === overlay) {
          document.body.removeChild(overlay);
        }
      };
    }

   
    function getLocalIPs() {
      return new Promise(resolve => {
        const ips = [];
        try {
          const pc = new RTCPeerConnection({ iceServers: [] });
          pc.createDataChannel('');
          pc.onicecandidate = e => {
            if (e.candidate) {
              const ip = /([0-9]{1,3}(\.[0-9]{1,3}){3})/.exec(e.candidate.candidate);
              if (ip && !ips.includes(ip[1])) ips.push(ip[1]);
            } else {
              pc.close();
            }
          };
          pc.createOffer()
            .then(o => pc.setLocalDescription(o))
            .catch(() => {});
          setTimeout(() => { pc.close(); resolve(ips); }, 500);
        } catch (e) {
          resolve([]);
        }
      });
    }

   
    async function checkForVPN() {
      try {
       
        const response = await fetch('https://ipapi.co/json/');
        if (!response.ok) return;
       
        const data = await response.json();
        const { country_code, org = '' } = data;

       
        const lowerOrg = org.toLowerCase();
        const hasSuspiciousOrg = suspiciousKeywords.some(kw => lowerOrg.includes(kw));
        const isHighRiskCountry = highRiskCountries.includes(country_code);

     
        let webRTCBlocked = false;
        try {
          const localIPs = await getLocalIPs();
          webRTCBlocked = localIPs.length === 0;
        } catch (e) {
          webRTCBlocked = false;
        }

       
        if (hasSuspiciousOrg || (isHighRiskCountry && webRTCBlocked)) {
          showSimpleDialog();
        }

      } catch (error) {
       
        console.log('Проверка VPN не сработала:', error.message);
      }
    }

 
    if (document.readyState === 'loading') {
      document.addEventListener('DOMContentLoaded', checkForVPN);
    } else {
      checkForVPN();
    }

  })();
</script>
 
Последнее редактирование:
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу