Возможно, я обнаружил дыру в безопасности в структуре аутентификации Django для сброса паролей.
При использовании django.contrib.auth
представлений форма сброса пароля запрашивает только электронное письмо, ожидая, что это адрес электронной почты зарегистрированной учетной записи, запрашивающей сброс пароля.Однако я могу ввести адрес электронной почты любой зарегистрированной учетной записи и отправить ссылку для сброса пароля на это письмо.Если я открою ссылку в этом письме и введу новый требуемый пароль, изменится на пароль для учетной записи, зарегистрированной для этого письма, а не для учетной записи, которая ввела этот адрес электронной почты .
Этоозначает, что если пользователь получает доступ к электронной почте другого пользователя, он может сбросить пароль скомпрометированного пользователя без необходимости входить в систему как скомпрометированный пользователь.
Существует ли способ проверить, введен ли введенный адрес электронной почты длясброс пароля - это фактически электронная почта пользователя, запрашивающего сброс?Если нет, есть ли лучший, более безопасный способ обработки запросов на сброс пароля?