Форма восстановления пароля кажется простой: пользователь вводит email, сайт отправляет письмо. Но если ее можно вызвать сотни раз подряд, она превращается в источник спама, нагрузки и жалоб на домен.
Для бизнеса это опасно не только технически. Почтовый домен может испортить репутацию, реальные письма перестанут доходить, а пользователи начнут получать лишние сообщения и терять доверие к сервису.
Коротко: нужны лимиты, нейтральный ответ формы, контроль очереди писем, защита от перебора и журнал подозрительных запросов.Почему возникает проблема
Обычно проблема возникает из-за отсутствия rate limit, одинакового ответа для любых запросов без внутреннего контроля, прямой отправки писем из формы и отсутствия очереди с дедупликацией.
Что проверяю в первую очередь
- есть ли лимит по IP, email и сессии
- можно ли отправлять письмо повторно каждую секунду
- попадает ли email в логи и аналитику
- как ведет себя форма для несуществующих адресов
- есть ли очередь и повторная отправка без дублей
Как исправляю
Я разделяю пользовательский интерфейс и внутреннюю отправку писем: форма отвечает спокойно, а backend проверяет лимиты, очередь и безопасность.
- добавляю rate limit по IP и email
- делаю одинаковый внешний ответ для найденного и не найденного аккаунта
- ограничиваю повторную отправку письма
- перевожу отправку в очередь
- добавляю журнал подозрительной активности
Что подготовить перед обращением
- ссылка на сайт или кабинет
- скриншот проблемы
- пример пользователя, заказа или события
- время, когда ошибка повторялась
- доступы или выгрузка логов без лишних персональных данных
Какой результат нужен
Пользователь должен безопасно получить письмо, а массовая отправка должна блокироваться без поломки восстановления доступа для реальных клиентов.
Чего лучше не делать
Не стоит просто ставить капчу на каждое действие. Без серверных лимитов капча не решает проблему полностью и ухудшает обычный сценарий восстановления.
Вопросы и ответы
Нужно ли показывать, что email найден?
Нет. Лучше показать нейтральный текст, чтобы не раскрывать наличие аккаунта.
Можно ли обойтись только лимитом по IP?
Нет, лучше сочетать лимит по IP, email, сессии и частоте отправки.
Нужна ли очередь писем?
Да, очередь помогает не перегружать SMTP и контролировать повторы.
Нужна похожая задача?
Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Коротко опишите проблему, приложите ссылку, скриншот, лог ошибки или пример заказа, и я подскажу, с чего безопасно начать исправление.
Итог
Форма восстановления должна быть удобной для пользователя и неудобной для массовой отправки. Это решается лимитами, очередью, нейтральными ответами и логированием.