Protecting against gmail dot trick in Discourse

Не знаю, @sam, мне кажется, нам нужен плагин для создания пользователей с CAPTCHA? Мне не кажется, что «запрет точек и плюсов» лечит корень проблемы — это лишь устраняет симптомы? :thinking:

Исторически сложилось так, что со временем спам всё чаще исходит от реальных людей. Я имею в виду, что они заполняют профили, загружают аватары и делают всё необходимое. Автоматизированные спамеры (за исключением bamwar) не были серьёзной проблемой в Discourse, поскольку наша платформа, будучи полноценным JavaScript-приложением, очень сложна для автоматизации. Заметьте, что большинство ваших комментариев, @neounix, попадают в категорию, описанную в моём предыдущем предложении — нам очень сложно написать скрипт из-за нашей сложности по сравнению с сайтом на HTML 1.0 из 1999 года. Повышение этого порога сложности устраняет основную часть проблемы, судя по тому, что мы наблюдали у наших клиентов и здесь, на meta.

В общем, TL;DR: я не обязательно против простого параметра «запретить определённые символы в адресах электронной почты», но, если честно, я не думаю, что что-то, кроме CAPTCHA, сможет существенно помочь в данном случае? Может быть, можно сделать и то, и другое?

5 лайков

Однако некоторые пользователи (включая меня) используют знак «+» для сортировки писем в своём почтовом клиенте.

3 лайка

Не волнуйтесь, по умолчанию это не включено, это скорее режим «блокировки при атаке» через настройки сайта.

7 лайков

@neounix Легенда. Спасибо за советы, очень ценю — вы отправили меня в путешествие по уничтожению спама. Я временно включил в Cloudflare режим «Я под атакой» (что остановило их регистрации — они создавали новый аккаунт каждые 1–2 минуты) и проверил логи брандмауэра Cloudflare на предмет используемых ими IP-адресов, увидев, что система проверяет/логирует каждого посетителя. Они действительно использовали идентичные user-agent.

Я добавил правило брандмауэра для проверки пользователей с таким user-agent и отключил режим «Я под атакой» в CF. Я не думаю, что многим невиновным пользователям приходилось проходить проверку, и это полностью остановило их спам-регистрации.

Затем я обнаружил функцию блокировки по номеру автономной системы (ASN), которую предоставляет Cloudflare, и настроил дополнительные правила брандмауэра для блокировки значительной части таких ASN, ссылаясь на логи блокировки по user-agent. Конечно, есть обходные пути, я уверен, вы о них знаете, но это дополнительные затраты ресурсов и усилий для них.

:content:

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

Капча способствует этому. Около $2 за тысячу решений reCAPTCHA (с использованием API для решения капчи, например, https://anti-captcha.com). Плюс дополнительные сложности, требуемые для их ботов.

Кстати: у Anti-captcha есть браузерный плагин для автоматического решения ваших капч, он работает хорошо и является приятным удобством. :goodnews:

Адреса электронной почты обычно представляют собой ещё одну статью затрат ресурсов при массовом создании аккаунтов. Однако это не так, когда один пользователь может создавать практически неограниченное количество аккаунтов с одного адреса Gmail. Стоимость создания 1000 аккаунтов Gmail довольно значительна, поэтому спамеры часто прибегают к другим менее строгим провайдерам или доменам с функцией catchall. Это всё равно потребует от них ресурсов и легче идентифицируется как спам.

Я думаю, что здесь действительно работает принцип «чем больше, тем лучше». Ни одна отдельная защита не будет достаточно сильной; просто увеличение объёма ресурсов и усилий, необходимых спамерам в целом, — это шаги в правильном направлении. В идеальном случае спамерам должно быть сложнее спамить на форумах Discourse, чем администраторам блокировать такие атаки и массово удалять всё, что всё же проскакивает.

@itsbhanusharma Мне очень нравится возможность использовать символ «+», но именно поэтому мы не можем иметь всё и сразу, ха-ха. Было бы неплохо иметь возможность включить блокировку этого символа, если это необходимо для борьбы со спамерами.

2 лайка

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

5 лайков

Этот вопрос уже довольно подробно обсуждался выше, в этой самой теме.
«Запрет» точек и плюсов, вероятно, вызовет некоторые проблемы (по крайней мере, у некоторых пользователей). Идея заключалась в том, чтобы хранить «каноническую» версию email-адреса («очищенную» версию) и запрещать регистрацию дополнительных пользователей с той же канонической версией для Gmail (то есть, по сути, с ОДНИМ И ТЕМ ЖЕ email-адресом, благодаря уловкам Gmail).

Возможно, именно это имеет в виду Сэм, когда говорит:

Возможно, это то, что вы тоже имели в виду, @codinghorror, а не настоящий «запрет» на . и +.
Но я согласен с вами: это решит проблему только для Gmail (но не, например, при использовании «catchall» с доменом).

Действительно ли CAPTCHA что-то изменит, если вы сами говорите:

[quote=“codinghorror, пост:61, тема:22627”]
тенденция со временем сместилась в сторону 100% спам-ботов, имитирующих людей. Я имею в виду, что они заполняют профили пользователей, загружают аватары и делают всё остальное
[/quote]?

Похоже, мы действительно пропустили один шаг.

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

У большинства из нас есть несколько адресов электронной почты, если требуется тестовая учётная запись. Это не создаст значительных трудностей в данном случае. Если это настройка по умолчанию, то нам не нужно будет объяснять пользователям, как её включить уже после того, как произошёл инцидент с нарушением правил.

1 лайк

Знаки плюс (+) в адресах электронной почты, по моему мнению, можно в целом обрабатывать одинаково для всех почтовых доменов без особых проблем.

Для адресов вроде sp.a.mmer.king@gmail.com или s.pa.mmerking@gmail.com в случае Gmail это один и тот же адрес. Однако у некоторых других провайдеров это может быть не так, и оба адреса будут считаться уникальными пользователями.

Я считаю, что хорошим долгосрочным решением будет функция, аналогичная чёрному списку доменов электронной почты.

Добавьте пользовательский домен, для которого вы хотите запретить регистрацию с использованием уловок дублирования. Затем предоставьте возможность включать или отключать блокировку этих двух типов дублирования регистрации по отдельности. То есть: запретить дублирование с использованием уловки «плюс» и запретить дублирование с использованием уловки «точки» как отдельные опции.

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

Ещё один вариант, который мог бы повысить эффективность, — это возможность указывать несколько доменов в одной записи пользовательского домена, чтобы они рассматривались как один домен. Например, gmail.com и googlemail.com. Тогда кто-то не сможет зарегистрироваться дважды, используя, например, example@gmail.com и example@googlemail.com. У некоторых других провайдеров также есть взаимозаменяемые домены; я отправил несколько примеров Сэму. Это могло бы добавить немного дополнительной защиты, но в основном эксплуатируемой проблемой остаются регистрации с использованием уловок «плюс» и «точки».

В качестве альтернативы, возможно более простая реализация была бы похожа на описанную выше, но с двумя опциями для каждого пользовательского домена: блокировать все регистрации с использованием знаков «плюс» и/или точек. Если пользователь регистрируется с использованием такого домена и в его адресе есть «плюс» или точка, выдавать ошибку с инструкцией удалить точки и/или знаки «плюс» из адреса электронной почты (возможно, автоматически выполняя это действие) и попробовать снова. Это не идеально, но всё равно было бы очень эффективно.

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

Черные списки доменов уже существуют, но мы не можем исходить из того, что если пользователя можно также достичь через адрес googlemail или gmail, то следует отклонять один из них. Поэтому мы возвращаемся к каноническому «основному» адресу.

Сегодня существуют сайты, где пользователи вполне законно используют адресацию с «плюсом» и точки. Цель не в том, чтобы усложнить жизнь легитимным практикам, а лишь в том, чтобы ограничить необоснованные побочные эффекты, такие как наличие двух пользователей на один канонический адрес.

Если в процессе регистрации требуется предоставлять адрес электронной почты без точек и знаков «плюс» (с согласия пользователя, подобно валидации формы), то хранение такого адреса как основного email аккаунта было бы допустимым.

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

Существуют аккаунты Gmail, где основной канонический адрес содержит точки. Такие пользователи больше всего пострадают и запутаются, если точки будут принудительно удаляться при регистрации.

Я тоже не считаю это лучшей реализацией, и это определённо не должно быть вариантом по умолчанию, удобным для всех.

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

Что касается gmail и googlemail, я думаю, мы согласны. То же самое касается точек и знаков «плюс».

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

john@googlemail.com регистрируется первым → принят
john@gmail.com регистрируется позже → отклонён

matthew+{randomstring}@gmail.com регистрируется первым → принят
matthew@gmail.com регистрируется позже → отклонён
matthew@googlemail.com регистрируется позже → отклонён
m.att.he.w@gmail.com регистрируется позже → отклонён
matthew+{randomstring}@gmail.com регистрируется позже → отклонён
m.a.tt.ew+{randomstring}@googlemail.com регистрируется позже → отклонён

Различие между googlemail и gmail (и другими провайдерами, имеющими несколько альтернативных доменов) гораздо менее значимо, чем проблемы с точками и знаками «плюс». Тем не менее, обработка этих случаев была бы полезна.

Это крайне неудобное для пользователей изменение, и оно совершенно не нужно. Причина, по которой эти функции вообще существуют, — это определение источника электронной почты. Если я регистрируюсь, используя адрес stephen+meta@gmail.com, я могу настроить правило, позволяющее помечать любую почту, отправленную на этот адрес. Если аккаунт meta будет скомпрометирован и мой адрес начнёт получать спам на этот псевдоним, я сразу узнаю, где произошла утечка. Ограничивать то, как я использую электронную почту, — не решение; приведение моего адреса к каноническому виду для сравнения даёт тот же результат, не создавая никаких неудобств для пользователей.

Верно, и это связано с понятием канонического адреса. Если бы функция была реализована так, как изначально обсуждалось, мы бы очень выиграли от возможности связывать домены. Все перестановки точек и знаков «плюс», а также вариации доменов сравнивались бы с «единственно верным email» для этого почтового ящика, не создавая никаких неудобств.

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

Согласен: несовершенное решение = несовершенное. Я упомянул это лишь как альтернативу, которая потенциально проще в реализации. Это последняя часть моего сообщения, представленная как альтернатива моим основным предложениям, которые согласуются с множеством обсуждений в этой теме, а также разрешают использование символов «+» и точек, но не допускают дублирования аккаунтов.

Тем не менее, на мой взгляд, использование легитимными пользователями символа «+» в адресах электронной почты на нетехнических форумах и сайтах — это, как правило, пограничный случай.

Звучит действительно замечательно. :content:

Мое сообщение было в основном направлено на то, чтобы объяснить, как вычисляются канонические адреса для разных доменов электронной почты. То есть это не ограничивается только использованием с Gmail/Googlemail. По сути, я пытался сказать, что было бы хорошим долгосрочным решением предоставить пользователям возможность настраивать способ вычисления канонических адресов для каждого домена отдельно.

Некоторые другие провайдеры позволяют использовать «+», но не допускают вариаций с точками. Это означает, что вариации с точками являются уникальными адресами.

Тем не менее, реализация только для Gmail/Googlemail была бы отличной, и я не вижу причин, по которым её нельзя было бы включить по умолчанию.

Можете привести пример такого провайдера? Я спрашиваю, потому что большинство пользователей Gmail не знают о трюке с точками. Они зарегистрировали адрес с точками, дают всем эту версию своего email и были бы очень сбиты с толку, если бы им сказали, что «их email» недействителен.

Я редко встречаю людей, которые даже осознают, что их псевдоним без точек всё равно дойдёт до них.

1 лайк

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

Да, согласен, именно это будет основной причиной путаницы для обычных пользователей при использовании такого несовершенного решения.

Не может быть и речи о том, чтобы выбрать столь сложный подход. Мы не будем «нормализовать» адреса электронной почты.

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

Всё. Бинарный переключатель. Режим блокировки электронной почты: Да/Нет?

3 лайка

Ссылка:

Теперь это завершено.

Чтобы включить эту защиту, используйте настройку сайта enforce_canonical_emails (по умолчанию false).

После включения мы запретим дублирующиеся регистрации для пользователей, использующих трюк с точкой . в googlemail.com и gmail.com, а также трюк с плюсом + глобально.

Исправление очень безопасное и при отключенной настройке не оказывает никакого влияния «из коробки».

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

8 лайков

Хранение канонической формы в принципе проблематично. В каком формате они представлены?

Спецификация находится здесь:

Если настройка сайта не включена, ничего не произойдёт… ноль, ничего.

5 лайков

Спасибо за добрые слова, @markersocial.

Извините, что не ответил раньше — был занят другими задачами… Просто сейчас догоняю мета-обсуждение:

Обнаружение спама, фиктивных регистраций, DDoS-атак, вторжений и общая ситуационная осведомленность в киберпространстве, а также все остальные аналогичные задачи обнаружения и мультисенсорной фьюзии данных в области кибербезопасности — одна из моих любимых тем, как, кажется, вы знаете :slight_smile:

Будучи на передовой и участвуя во многих «ручных» кибербаталиях в реальном времени, позвольте дать вам ещё два совета, когда вы подвергаетесь такой атаке:

(1) Обнаружение часто больше искусство, чем чистая наука. Причина в том, что чем больше атакующие знают о ваших алгоритмах и методах обнаружения и смягчения, тем больше они будут мутировать и адаптироваться к вашим защитным мерам.

(2) Также никогда не забывайте «Петлю OODA». Наблюдай-Ориентируйся-Реши-Действуй Тот, кто сможет оказаться внутри петли OODA противника, как правило, победит в кибербитве.

Я рад видеть, что вы наслаждаетесь киберзащитой и смотрите на картину в целом. Судя по тому, что я быстро прочитал в этом обсуждении, у вас всё под контролем, и команда meta также внесла для вас полезное изменение.

Если вы снова окажетесь под атакой и вам понадобится помощь, не стесняйтесь обращаться ко мне. Я давно ушёл из мира погони за прибылью и накопления богатства (слава богу!), поэтому консультация со мной всегда бесплатна. Помощь другим, у которых есть интересные технические проблемы, особенно в области кибербезопасности и кибервойны, для меня важнее, чем накопление ещё большего богатства.

Я здесь для вас, если вам нужно, с кем обсудить идеи, и судя по вашим последним ответам, у вас всё под контролем.

Отличная работа!

5 лайков

@codinghorror Я считаю, что это изменение бессмысленно, и мне стоит просто откатить его.

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

Спаммеры могут просто запустить SMTP-сервер, что проще, чем автоматизация Gmail, и у них будет доступ к бесконечному количеству email-адресов.

Кроме того, адресация с использованием точек широко применяется в легитимных целях.

Самая распространённая проблема, связанная с точками в Gmail, — это не спам, а опечатки в адресах.

Думаю, единственное изменение, которое я поддерживаю в ядре, — это расширение функционала блокировки email для блокировки канонических адресов. По крайней мере, это улучшит функцию блокировки email и решит проблему, описанную в оригинальном посте.

Например, если вы заблокировали Jane@gmail.com, это также заблокирует j.ane+1@gmail.com.

Любые другие изменения можно реализовать в виде плагинов.

Звучит ли это нормально?

7 лайков