Перейти к содержимому

Один gmail — тысячи адресов: как точки обходят проверку уникальности email

Один Gmail - тысячи адресов для одного сервиса: как точки ломают проверку уникальности

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

С такой особенностью мы столкнулись случайно во время проверки пользовательских данных. Разработчики заметили почти одинаковые адреса, отличавшиеся только расстановкой точек. Например:

- `exampleuser@gmail.com`;
- `example.user@gmail.com`;
- `exam.pleuser@gmail.com`.

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

Почему Gmail игнорирует точки

Для адресов Gmail точки в локальной части, то есть до символа `@`, не имеют значения. Система воспринимает `example.user@gmail.com` и `exam.pleuser@gmail.com` как один аккаунт.

Это не сбой и не уязвимость самого Gmail. Правило заложено в работу сервиса: владелец исходного адреса автоматически контролирует все его варианты с точками. Другой человек не сможет зарегистрировать такой вариант отдельно и получить доступ к соответствующему ящику.

Проблема появляется не в почтовой системе, а в стороннем приложении. Если сервис сравнивает email как обычную строку, он считает каждую новую комбинацию самостоятельным адресом.

Сколько вариантов можно создать

Предположим, имя ящика состоит из `n` символов. Между ними есть `n − 1` позиций, в каждой из которых точку можно либо поставить, либо оставить пустой.

Количество комбинаций рассчитывается по формуле:

2^(n − 1)

Если имя содержит 15 символов, получится:

2¹⁴ = 16 384 варианта

Теоретически один Gmail-ящик можно представить сервису в виде 16 384 разных строк. Каждая из них будет проходить проверку формата email и вести в тот же почтовый ящик.

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

Что на самом деле подтверждает email

При регистрации приложение обычно действует следующим образом:

1. принимает адрес;
2. проверяет его синтаксис;
3. ищет точное совпадение в базе;
4. отправляет письмо с кодом или ссылкой;
5. создаёт учётную запись после подтверждения.

Если в базе уже есть `exampleuser@gmail.com`, но отсутствует `example.user@gmail.com`, система может принять второй вариант за новый адрес. Письмо при этом всё равно получит владелец первого ящика и без труда завершит регистрацию.

Таким образом, подтверждается не уникальность пользователя, а только наличие доступа к почтовому ящику.

Проверка письмом не доказывает, что:

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

Чем это опасно для продукта

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

Если правило "одна возможность на человека" реализовано как "одна возможность на строку email", пользователь может:

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

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

Почему простое удаление точек не является универсальным решением

На первый взгляд проблема решается элементарно: перед сохранением убрать из Gmail-адреса все точки. Для конкретного сценария это действительно может помочь. Например, все варианты `example.user@gmail.com` и `exam.pleuser@gmail.com` будут приведены к `exampleuser@gmail.com`.

Но применять такое правило ко всем адресам нельзя.

Разные почтовые провайдеры обрабатывают точки по-разному. Для одного сервиса они могут игнорироваться, а для другого - быть частью уникального имени. Если безоговорочно удалять точки у каждого адреса, приложение рискует объединить реальные разные почтовые ящики.

Поэтому нормализация должна учитывать домен и правила конкретного провайдера. Нельзя превращать предположение о поведении Gmail в универсальный стандарт для всех email-адресов.

Какие меры стоит внедрить

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

Для защиты можно использовать несколько уровней контроля:

- нормализовать Gmail-адреса по известным правилам;
- хранить исходный адрес отдельно от канонической версии;
- учитывать домен почтового провайдера;
- проверять повторное использование телефона;
- анализировать платёжные реквизиты;
- учитывать устройство, IP-адрес и поведенческие признаки;
- ограничивать бонусы не только по email;
- проверять подозрительные массовые регистрации;
- связывать аккаунты с подтверждёнными внешними идентификаторами.

При этом технические признаки не должны использоваться механически. Общий IP, например, может быть у сотрудников одной компании, пользователей мобильной сети или посетителей общественного Wi‑Fi. Поэтому решение лучше принимать по совокупности факторов.

Как проектировать регистрацию безопаснее

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

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

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

Что проверить разработчикам

Аудит можно начать с простого теста:

1. создать тестовый Gmail-ящик;
2. зарегистрировать один вариант адреса;
3. повторить регистрацию с несколькими комбинациями точек;
4. проверить, проходят ли они валидацию;
5. убедиться, как система начисляет бонусы и строит статистику;
6. посмотреть, не создаются ли новые записи в таблице пользователей.

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

Главный вывод

Email с подтверждённой ссылкой - это доказательство доступа к почтовому ящику, но не надёжный признак уникальности пользователя. Gmail специально игнорирует точки в имени адреса, а значит, сервис, который сравнивает email только как текстовую строку, может принять несколько вариантов одного ящика за независимые аккаунты.

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

Прокрутить вверх