Срок действия одноразового пароля в С# истекает через определенный период?

Я работаю над страницей входа для веб-сайта на C#.net, столкнулся с проблемой и надеялся, что вы, ребята, сможете мне помочь.

Это случай: пользователь переходит на экран входа в систему, затем оттуда он вводит свой адрес электронной почты, мы обратимся к базе данных, чтобы проверить правильность, и, если она действительна, будет выбран случайный 8-значный ключ. формируется и отправляется на почту. Теперь пользователь должен проверить свою электронную почту, чтобы получить «Одноразовый пароль», а затем ввести одно текстовое поле, чтобы продолжить.

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

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

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

Каковы ваши наилучшие подходы к этой ситуации?

Спасибо!


person Justin Shinorlax YoonAddict    schedule 24.10.2012    source источник
comment
Ухх, нужно добавить здесь комментарий, я ищу способ сделать это без взаимодействия с базой данных, так как это сложнее.. Мне было интересно, есть ли способ сделать это без сохранения в базе данных ›‹   -  person Justin Shinorlax YoonAddict    schedule 24.10.2012


Ответы (1)


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

person awright18    schedule 24.10.2012
comment
В принципе, он также может указать время истечения срока действия токена в зашифрованном виде. Но тут довольно легко ошибиться. - person CodesInChaos; 24.10.2012
comment
@CodesInChaos, на практике это, вероятно, было бы хорошо, но если злоумышленник выяснит, как зашифрованы эти сроки действия, он / она потенциально может создать свои собственные токены с настраиваемыми сроками действия. Напротив, если предположить, что база данных защищена от SQL-инъекций, эта атака смягчается. - person Spencer D; 18.02.2015
comment
@SpencerDoak Лично мне нравится хранить хэш токена в базе данных (поэтому доступа на чтение к БД недостаточно для изучения токена) вместе с датой истечения срока действия. Но создание действительного MAC-адреса на поддельном токене требует утечки ключа, хранящегося на сервере, чего не должно происходить, точно так же, как злоумышленник не должен иметь доступа к базе данных. - person CodesInChaos; 18.02.2015
comment
@CodesInChaos, ах, теперь я могу с этим согласиться. Подпись одноразового пароля действительно было бы безопаснее хранить в базе данных вместе со сроком действия. Я просто заметил, что доверять пользователю время истечения срока действия (даже если оно было зашифровано) может быть не самой безопасной идеей. Но опять же, я считаю, что вы правы в том, что хранить хэш токена в базе данных вместе со сроком его действия было бы разумно. - person Spencer D; 18.02.2015