Допустим, вы создали систему сброса пароля для своего веб-приложения. Системе требуется либо имя пользователя, либо электронная почта, чтобы отправить ссылку для сброса на электронную почту учетной записи.
Рассмотрим эти противоречивые требования:
- Взломщик A вводит в форму системы потенциальных имен пользователей (или электронных писем) в попытке обнаружить совпадения в настоящее время в системе.
В идеале система не должна ни подтверждать, ни опровергать наличие существующих имен пользователей и электронных писем, предоставляя одинаковую обратную связь для каждого случая, чтобы предотвратить выявление совпадений.
- Пользователь B пытается сбросить свой пароль, но ошибочные или, что еще хуже, ошибочно вводит имя пользователя, так что оно не соответствует ни одной учетной записи в файле.
Таким образом, их запрос на сброс никогда не будет выполнен.
В идеале, их ошибка должна быть понятна им через несколько секунд после того, как они запросят сброс, с дружеским сообщением типа «Извините, у нас нет такого имени пользователя (или адреса электронной почты) в файле. Вы можете попробовать проверить орфографию, или создать новую учетную запись. " В противном случае, они могут проверить свою электронную почту, ничего не найти, подождать, ничего, сбросить снова, ничего (потому что совпадение не доступно для отправки), возможно, заняться своими делами в другом месте? Если вам повезет, позвоните в отдел обслуживания клиентов?
Какие существуют способы разрешения этих противоречивых целей?
Edit:
Обдумав проблему, я полагаю, что одним из способов ее решения может быть использование только адреса электронной почты, и, если это письмо не существует в системе, отправить a "Эта учетная запись не существует, вот ссылка для создания новой учетной записи "на электронную почту вместо ссылки сброса.
Таким образом, пользователь всегда будет получать информацию, а взломщик сможет получать только электронные письма, отправленные на те учетные записи, к которым у него уже есть доступ, что для них бесполезно.
Имеет смысл? Проблемы с этим подходом?