Весь подход к вопросам безопасности довольно некорректен.
Я всегда находил люди ставят ответы на вопросы безопасности слабее, чем пароли, которые они используют .
Вопросы безопасности - это еще одно звено в цепочке безопасности - более слабое звено!
IMO, лучше всего было бы разрешить пользователю запрашивать новый пароль, отправленный на его зарегистрированный идентификатор электронной почты . Это имеет два преимущества.
- попытка грубой силы должна сначала найти и сломать службу электронной почты (и вы никогда им не поможете - сохраняйте регистрационный идентификатор электронной почты очень защищенным)
- пользователь вашего сервиса всегда получит указание, когда кто-то попробует перебор (ему отправят письмо с сообщением, что он попытался восстановить свой пароль)
Если у вас ДОЛЖНЫ быть секретные вопросы, дайте им возможность инициировать повторную генерацию (никогда не отправляйте пароль пользователя, повторно генерировать временную, желательно одноразовую принудительную) отправку пароля на идентификатор электронной почты, который они зарегистрировали - и выполните вообще не показывать.
Еще одна хитрость заключается в том, чтобы сделать секретный вопрос САМОМ их зарегистрированным идентификатором электронной почты .
Если они исправят это, вы отправите сгенерированный временный пароль на этот идентификатор электронной почты.