2009-10-26 5 views
0

Я пишу веб-приложение и для определенных действий пользователю необходимо ввести одноразовый вывод (OTP) - похожий на большинство банковских веб-сайтов.Безопасно ли хранить OTP в сеансе?

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

Можно ли хранить эту сгенерированную строку в объекте ASP Session?

ответ

0

Сессия - это серверная коллекция, недоступная на клиенте (в отличие от файлов cookie/viewstate). Он должен быть свободен от манипуляции с клиентом.

Тем не менее, я думаю, вы должны хранить эти OTP в базе данных и сравнивать с ними.

+0

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

+1

Я думаю, что Доки ответил на это уже ;-) – weismat

+0

Что делать, если пользователь закрывает браузер, идет ли чашка тройника, а затем возвращается и выполняет миссию? Переменная сеанса будет потеряна. Если это, тем не менее, именно то, что вы хотите, тогда сеанс будет очень хорошим. – 2009-10-26 10:17:19

1

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

4

Не храните ПИН-код. Хеш (один из алгоритмов SHA, желательно с некоторой солью) и сохраните хэш. Затем сравните хэш того, что пользователь вводит в хэш, который вы сохранили. Затем, если ваше хранилище (будь то в объекте сеанса, какая-то база данных или что-то еще) скомпрометировано, злоумышленник не узнает, что такое ПИН.

+0

Хорошая идея –

Смежные вопросы