Подтвердите ответ на контрольный вопрос при использовании хешированных паролей - PullRequest
0 голосов
/ 09 августа 2011

Я унаследовал приложение, которое использует поставщика членства ASP.NET для управления пользователями. В рамках различных исправлений и улучшений я заменяю использование простых текстовых паролей хэшированными. На существующей странице сброса пароля пользователь должен снова ввести правильный ответ на свой секретный вопрос, свой текущий пароль, новый пароль и новый пароль.

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

Я не могу вызвать GetPassword () , так как этот метод недоступен, если passwordFormat = "Hashed" в Web.config.

Я попытался вручную расшифровать ответ с хешированным секретным вопросом, как описано здесь , но это относится только к зашифрованным значениям, а не к хешированным (логично, я полагаю:))

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

У кого-нибудь есть еще предложения? Это кажется довольно фундаментальным, поэтому я чувствую, что упускаю что-то очевидное.

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Я не отвечаю прямо на ваш вопрос о проверке секретного вопроса, но я хотел бы подчеркнуть, что вопросы безопасности являются очень плохой практикой с точки зрения безопасности (читай " ЧАСТЬ III": Использование секретных вопросов" здесь ).

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

0 голосов
/ 09 августа 2011

Бах, одна чашка кофе позже, и ответ был очевиден.У меня было это в моем методе проверки:

var result = DataService.ExecuteScalar(cmd);
return result == null;

, где я должен был иметь это:

var result = DataService.ExecuteScalar(cmd);
return result != null;

Также кажется, что я ошибался, когда думал, что хэшированные строки для секретного вопросаОтвет был другим.

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