Похоже, что блокировка всё ещё работает, но не полностью, так как в логах я всё ещё вижу регулярные совпадения с записью → проверенные электронные письма, но не для всех комбинаций. Пользователь смог создать несколько сотен аккаунтов сегодня, используя один и тот же заблокированный Gmail.
Используемые ими вариации точек в Gmail содержат от 6 до 14 точек, длина электронной почты составляет 19 символов (до @), они не используют вариации с символом «+» (или все такие вариации успешно блокируются).
Возможно, это имеет значение: у меня установлено расстояние Левенштейна для спамерских электронных писем равным 3 (по умолчанию — 2). Discourse был недавно обновлён с версии 2.6.x до стабильной версии 2.7.1.
Хм, я забыл, как мы решили этот вопрос, @sam, но это, возможно, ошибка, поскольку вы сказали:
Это означает, что если evil.person+77@gmail.com будет заблокирован, мы заблокируем evilperson@gmail.com. Тогда, когда e.v.i.l.person@gmail.com попытается проскользнуть, он будет заблокирован благодаря каноническому сопоставлению.
Итак, что произойдёт, если sara.hanson@ сделает что-то ужасное, а sarah.anson@ окажется втянутым в перекрёстный огонь? Это похоже на ситуацию, когда я не уверен, что joe98@ и joe99@ можно считать одним и тем же адресом электронной почты. Думаю, это зависит от состава сообщества и степени ручного контроля, применяемого при сопоставлении.
«Адресация с плюсом» хотя бы указывает на папку, принадлежащую почтовому ящику с тем же адресом электронной почты (поскольку всё, что стоит перед «+», одинаково).
Возможно, стоит бороться с регистрацией по диапазонам IP-адресов? Всё это зависит от того, насколько изощрёнными являются спамеры. Приходя сюда из сообщества Let’s Encrypt, мы знаем, что там есть трекерная тема, подробно описывающая некоторые довольно широкие тактики спама, которые пытались применить. У нас даже были случаи, когда люди оказывали реальную техническую помощь, а через несколько недель начинали рассылать спам.
Интересно. Я и не знал, что Gmail действительно делает такое различие. Сегодня узнал немало нового. Интересно, зачем они это делают? Похоже, это занимает довольно много места. Только ли адреса Gmail здесь вызывают беспокойство?
Думаю, мы пришли к выводу: «Мне не нравится то место, где мы оказались, потому что это кошмар для поддержки, и проблема никуда не денется :)».
Мне кажется, если сайт является вектором спама, ему должно быть разрешено сказать: «Сделайте все мои адреса электронной почты каноническими», и я не буду возражать против недостатков.
Это означает, что оба этих адреса будут иметь канонический вид samsam@somewhere.com:
sam.sam@somewhere.com
samsam+11@somewhere.com
Если зарегистрируется sam.sam@somewhere.com, то samsam+11@somewhere.com больше не сможет зарегистрироваться.
Это было моё первоначальное решение, которое я в итоге отменил (хотя оно содержало исключение для Google, что, оглядываясь назад, было недостаточно строго).
Мне кажется, нам стоит просто закрыть эту тему, добавив новую настройку сайта:
«О боже, я огромный вектор спама, включите режим сверхмощной фольги».
Что касается ошибки: если блокировать с задержкой, сейчас туда легко может просочиться что угодно. В данный момент это на 100% реактивный процесс.
Это означает, что следующее работает нормально (не стесняйтесь проверить в консоли, @markersocial):
./launcher enter app
rails c
ScreenedEmail.block('examplemailaddress@gmail.com')
ScreenedEmail.should_block?('e.x.a.m.pl.e.m.ai.lad.dre.ss@gmail.com')
# true
Проблема в следующем:
# Созданы сотни аккаунтов
ScreenedEmail.block('examplemailaddress@gmail.com')
# Сотни аккаунтов всё ещё существуют
Ах да, первоначальная просьба — блокировать все письма со специальными символами через настройку сайта. Мне казалось, я предлагал это, а вам не понравилось? Не помню уже.
Я думаю, что всё сводится к тому, что @markersocial хочет функцию (принудительный канонический адрес, как я изначально реализовал), которая, судя по всему, не нужна ни одному из тысяч наших размещённых клиентов.
Мы можем продолжать дорабатывать реактивную функцию (поиск канонических адресов при блокировке и предложение администратору удалить шумные аккаунты). Хотя я бы предпочел сначала услышать несколько повторных жалоб.
Блокировка на основе регулярных выражений, безусловно, не сработает для @markersocial, но я с радостью подтвержу это, если он сам это сделает.
У меня нет воспроизведения проблемы из исходного сообщения, и я сильно подозреваю, что проблемные аккаунты были созданы до добавления блокировки.
Могу подтвердить, что первоначальное решение работало идеально и решило эту проблему с Gmail. Если бы этот опциональный режим вернули, это стало бы настоящим спасением.
Спаммеры постоянно осваивают новые техники и по-прежнему успешно обходят такие крупные платформы, как Facebook, Instagram и Twitter. Это делает большинство других площадок «режимом лёгкой игры». Для многих это работа полный рабочий день, поэтому по сути получается:
Если есть возможность эксплуатации и (затраты ресурсов < заработанная сумма), то эксплуатация произойдёт.
Они могут обойти практически любую меру; единственная надежда — повысить стоимость обхода до уровня, когда это становится экономически невыгодным.
Возможность массовой рассылки спама с практически неограниченным количеством писем/аккаунтов (до обнаружения и последующей блокировки их канонического Gmail-адреса модератором/администратором и ручного удаления их постов) довольно экономически эффективна. Особенно если нет команды модераторов, работающих 24/7.
Стоимость обхода анти-спам мер продолжает снижаться. Один из примеров — прокси 4G/5G: за примерно 30–50 долларов в месяц люди могут получить доступ к практически неограниченному количеству реальных мобильных IP-адресов от легитимных провайдеров/ASN, которые автоматически или вручную ротационно меняются и используются целыми городами/штатами легитимными пользователями от крупных провайдеров. IP-адреса 4G/5G используются многими пользователями одновременно.
Блокировка этих провайдеров/ASN или IP-адресов не подходит (нельзя просто заблокировать всех, кто использует Verizon, AT&T и т. д.). Обычно они используют IP один раз и затем выбрасывают его. Заблокированные отдельные IP-адреса из этого списка также заблокируют легитимных пользователей, которые случайно используют тот же IP. Блокировка по IP постепенно становится устаревшей практикой (за исключением ASN известных хостинг-провайдеров). Вы можете увидеть верхушку айсберга на этих форумах:
Я считаю, что спамеры — это смесь полностью или частично созданных вручную ботов и ручного спама. Поскольку Discourse захватывает всё большую долю рынка, что, очевидно, происходит фантастическими темпами, меня бы удивило, если бы он не стал целью коммерчески доступных ботов.
Как только Xrumer начнёт поддерживать последнюю версию reCAPTCHA, я бы сказал, что большинство вебмастеров на устаревших форумах заметят резкий рост спама из-за крайне низкой стоимости рассылки (больше не нужно использовать API для решения капчи, которые уже очень дёшевы за 1 тыс. решений):
http://botmasterlabs.net/buy1/
Люди уже могут создавать свои собственные плагины/скрипты для поддержки практически любой платформы с помощью Xrumer. Но если однажды они добавят поддержку Discourse «из коробки»:
Я не могу претендовать на беспристрастность, так как сам остро нуждаюсь в анти-спам мерах. Первоначальный пост о трюке с точками в Gmail был создан кем-то другим в 2014 году, и кажется, что другой пользователь решил это, потребовав одобрения для первых X постов, так что, возможно, это уже как минимум три сообщения от пользователей?
Извините за отступление, возвращаемся к теме.
Что касается блокировки email через регулярные выражения, да, вы правы. Это частичное решение, но не идеальное по следующим причинам:
Если блокировать все Gmail с одной точкой или более перед @:
Это неизбежно заблокирует реальных легитимных пользователей Gmail, у которых есть одна или несколько точек в адресе, что очень распространено.
Спамеры всё ещё могут создать довольно много вариаций с одной точкой. Например, Gmail имеет максимальную длину 30 символов, например, 12345678901234567890123456789.0@gmail.com даст 30 рабочих комбинаций с одной точкой.
Если блокировать все Gmail с двумя точками или более перед @:
Меньше легитимных Gmail будет заблокировано, но всё равно будут заблокированы легитимные пользователи с более чем одной точкой в адресе.
Спамеры могут создать гораздо больше вариаций с одним 30-символьным Gmail. Я думаю, около 842 комбинаций.
Могу подтвердить, что новые аккаунты прошли после активации блокировки, так как дата создания блокировки — 1 февраля. Я наблюдал за созданием новых аккаунтов вчера, видя как новые совпадения правила блокировки, так и новые регистрации, использующие комбинации того же email (только точки).
Я отключил регистрации на ночь и включил их снова сегодня утром. На сегодняшний день они создали уже 104 новых аккаунта с перестановками этого адреса Gmail и продолжают регистрировать больше. Могу подтвердить, что после удаления точек из email этих аккаунтов получается точное совпадение с записью заблокированных экраном email.
Я пытался протестировать блокировки в rails c, как описано, и вот тут становится немного странно.
Кажется, что некоторые записи возвращают «true», как и предполагалось, а некоторые возвращают «false», даже если тестируемый email полностью совпадает с каноническим заблокированным email. Для записей, возвращающих «true», всё работало именно так, как задумано, и возвращало true для всех протестированных вариаций. Но для email, возвращающих false, все протестированные вариации также возвращали false.
Я пытался найти какие-либо корреляции. Могу подтвердить, что они не коррелируют (или, по крайней мере, не последовательно коррелируют):
Длина email (до @)
Наличие символов и цифр в email
Количество совпадений (сколько раз заблокирован)
Дата совпадения
Кажется, есть корреляция с датой создания блокировки: более старые блокировки с меньшей вероятностью работают (возвращают false). Записи, созданные 9 дней назад, возвращали смесь true/false, а все записи, которые я тестировал до сих пор и которые были созданы раньше этого (от 1 часа до 8 дней), возвращали true.
Возможно, это связано с опцией «максимальный возраст неподтверждённых email»? Я думаю, эта опция появилась относительно недавно, у меня она установлена по умолчанию на 365 дней.
Что ж, если вы сможете предоставить подробные шаги для воспроизведения ошибки, мы обязательно её исправим.
max age unmatched emails — это не новый параметр. Вместе с max age unmatched ips это инструмент для очистки действительно старых записей в списках отфильтрованных IP-адресов и адресов электронной почты соответственно — записей, которые не были сопоставлены ни с чем в течение года.
Я вас понимаю. Я думаю, что главное возражение @codinghorror против первоначальной реализации заключалось в том, что мы внедряли специальную логику для Google. Это сильно беспокоило Джеффа.
Думаю, уточнение «всё приводится к каноническому виду, независимо от домена» несколько смягчает эту проблему.
Например:
sam+982@sam.com → разрешена регистрация … сначала sam@sam.com s.a.m.@sam.com → регистрация запрещена … второй раз я заметил sam@sam.com, и этот канонический адрес уже зарегистрирован.
Возможно, это вернётся когда-нибудь, нам просто нужно найти другое место для предотвращения такого злоупотребления. В прошлый раз, когда я проводил расследование, мы не столкнулись с подобными злоупотреблениями на нашем хостинге.
Сегодня у меня есть немного времени для публикации, но я хотел поделиться дополнительной информацией перед более подробным ответом.
Я обнаружил, что удаление записи, которая возвращала false в логах → проверенная электронная почта (разрешить), а затем повторная блокировка этого адреса (через удаление пользователя + блокировка на странице администратора пользователя), привела к тому, что ранее неработавшее правило теперь стабильно возвращает true как для прямого совпадения, так и для его вариантов.
Это согласуется с наблюдением о том, что проблема связана со старыми записями. Потребуется дополнительное тестирование.