Безопасные способы сбросить пароль или вернуть старый пароль

Каков наиболее безопасный способ обработки забытых паролей / сброса паролей? Следует ли мне отправить пароль пользователю по электронной почте? Если да, то заставляете ли вы их сбросить? Или вы позволите им немедленно сбросить его (без отправки электронного письма) и потребовать некоторую другую информацию, чтобы убедиться, что это они? Или есть способ получше?


person Josh Curren    schedule 01.03.2010    source источник
comment
Совсем недавно по этой теме развернулась обширная дискуссия: stackoverflow.com/questions/2283937/   -  person Greg Hewgill    schedule 02.03.2010
comment
Если ваша система может найти пароль пользователя и отправить его ему по электронной почте, вы сделали что-то очень неправильное. Вы никогда не должны иметь возможность искать пароль пользователя. Вы должны иметь возможность только хешировать входящий пароль и сравнивать или изменять его и отправлять новый пароль.   -  person Scott    schedule 09.07.2011


Ответы (3)


Вы не можете отправить пароль пользователю по электронной почте, потому что вы его не знаете. Вы "хешировали" его с помощью применить к нему что-то вроде PBKDF2 или bcrypt для хранения, верно?

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

Метод, достаточно безопасный для многих приложений, - это отправить владельцу учетной записи по электронной почте ссылку, содержащую большое, случайно сгенерированное число. Этот токен должен быть действителен только в течение ограниченного времени. Если владелец хочет сбросить свой пароль, он щелкает ссылку, и это подтверждает его подлинность как владельца учетной записи. Затем владелец учетной записи может указать новый пароль.

person erickson    schedule 01.03.2010

Вы не должны отправлять пароли по электронной почте. Вот пошаговый процесс, который я использовал:

  1. Предоставьте пользователям возможность сбросить пароль.
  2. Эта опция сохраняет уникальный токен для пользователя. Срок действия токена истекает (часы, день или дни).
  3. Ссылка отправляется пользователю по электронной почте, которая включает в себя токен.
  4. Пользователь нажимает на ссылку, отправленную по электронной почте.
  5. Если токен существует и срок его действия еще не истек, по ссылке загружается форма нового пароля. В противном случае не загружайте форму нового пароля.
  6. Как только пользователь установит новый пароль, удалите токен и отправьте пользователю электронное письмо с подтверждением.

Пока не будет установлен новый пароль, старый пароль должен оставаться активным. Не забывайте хешировать и солить пароли!

person simeonwillbanks    schedule 01.03.2010

Полагаю, вы собираетесь делать это программно? Или это вопрос о сбое сервера?

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

НЕ отправляйте пароль пользователю по электронной почте

person AFD    schedule 01.03.2010