Проблема со сбросом пароля заключается в том, чтобы найти правильный баланс между безопасностью и удобством. Необходимо предоставить пользователям достаточно информации, чтобы они понимали, что происходит при запросе сброса пароля, но при этом нельзя раскрывать слишком много, иначе это может сыграть на руку злоумышленникам.
В идеале вы никогда не должны прямо подтверждать или отрицать существование аккаунта с указанным адресом электронной почты или именем пользователя.
Иногда можно столкнуться с сообщением об ошибке вроде: «Мы не смогли найти пользователя с этим адресом электронной почты». Если использовать такой подход, то отсутствие этого сообщения косвенно подтверждает существование аккаунта.
Однако нельзя просто оставить пользователя в неведении. Что если у него есть аккаунт, но он зарегистрирован с другим адресом? Если не дать пользователю понять, удалось ли найти его адрес, возникает проблема удобства использования. К счастью, решение простое.
Всегда отправляйте письмо на указанный адрес электронной почты.
Ваше подтверждающее сообщение, отображаемое на веб-странице, будет просто следующим: «На адрес (указанный адрес электронной почты) отправлено письмо с дальнейшими инструкциями». Однако содержание этого письма изменяется в зависимости от того, существует ли аккаунт с этим адресом:
- Если пользователь существует, вы отправляете стандартное письмо для сброса пароля с URL и инструкциями.
- Если пользователя нет, вы отправляете другое письмо, объясняющее, что аккаунт не найден, и предлагаете попробовать другой адрес электронной почты.
Недостаток такого подхода в том, что обратная связь на веб-странице не так мгновенна, как при отображении сообщения «пользователь не найден». Тем не менее, это жертва, которую стоит принести, так как только владелец адреса электронной почты сможет идентифицировать свои аккаунты для данного сервиса. Только владелец адреса получит какую-либо информацию о пароле, а любой, кто пытается выяснить существующие аккаунты, всегда будет видеть одно и то же сообщение и никогда не узнает, существует аккаунт или нет.