Что-то не так с этой процедурой сброса пароля? - PullRequest
2 голосов
/ 10 декабря 2011

Что-нибудь не так с этой процедурой?

  1. Введите имя пользователя и адрес электронной почты в форме сброса.
  2. Flask создает действительно длинную случайную строку и сохраняет ее в сеансе под "reset_code". Сессия также будет иметь ключ для "reset_pw_username"
  3. Flask отправляет электронное письмо со ссылкой на путь / password_reset / reset_pw_username / reset_code
  4. Эта ссылка отображает форму, в которой клиент может сбросить пароль, если код сброса сеанса соответствует элементу сеанса reset_code. Иначе это разорвется.
  5. Через сеанс истекает код сброса через час.

Ответы [ 4 ]

4 голосов
/ 11 декабря 2011

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

2 голосов
/ 11 декабря 2011

Вы должны убедиться, что введенные имя пользователя и адрес электронной почты совпадают с одной из учетных записей (или в первую очередь использовать адреса электронной почты в качестве имени пользователя).

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

Кроме того, вы должны обратить особое внимание на случайность (не столько длину) кода возврата. Он должен быть криптографически случайным (т. Е. os.urandom), чтобы злоумышленник не мог просто угадать его. random.random и производные методы не подходят.

1 голос
/ 11 декабря 2011

Как указал Жан-Поль, для запроса имени пользователя и электронной почты необходимо проверить, совпадают ли они оба с одним и тем же пользователем.Следовательно, более распространенным является запрос либо имени пользователя или электронной почты, проверка их наличия в вашей базе данных и отправка ссылки восстановления на соответствующий адрес.вероятно, будет громоздким для некоторых пользователей, как описано в phihag.Такие токены обычно хранятся в обычной базе данных.Однако обратите внимание, что они эквивалентны паролю : после получения их можно свободно обменять на пароль.Из-за этого они должны быть засолены и хэшированы (таким же образом, что и сами пароли) перед сохранением в базе данных.Это также означает, что ваш обработчик восстановления должен засолить и хэшировать входящий токен, прежде чем искать его в вашей базе данных.

0 голосов
/ 21 апреля 2012

Лучшее решение - использовать адрес электронной почты в качестве имени пользователя, тогда пользователь просто должен запомнить свой адрес электронной почты. И вам достаточно только подтвердить адрес электронной почты пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...