从一个视图功能安全地获取信息到另一个视图功能

时间:2017-07-13 17:04:48

标签: python authentication flask

我正在努力在flask中实现双因素身份验证,其中用户选择以下三种方式之一进行身份验证:使用FreeOtp进行TOTP,通过电子邮件进行HOTP以及安全性问题。我目前正在使用两个视图函数。一个获取他们的电子邮件和密码,另一个获得另一个认证因素。如果用户输入了正确的电子邮件和密码,我将他们的电子邮件和时间戳存储在会话变量中,并将它们发送到正确的功能以及它们的身份验证类型,如下所示:

if user.otp_secret is not None:
    session['email'] = user.email
    session['email_time'] = datetime.now()
    return redirect(url_for('userbp.token'))
elif user.use_questions:
    session['email'] = user.email
    session['email_time'] = datetime.now()
    return redirect(url_for('userbp.questions'))

然后在下一个视图函数中,我验证这些会话变量已设置,并且时间戳小于五分钟,如下所示:

if 'email_time' not in session or 'email' not in session:
    #Ensure proper sessions were created at first authenitcation
    if 'email' in session:
        del session['email']
    if 'email_time' in session:
        del session['email_time']
    abort(404)
if session['email_time'] < datetime.now() - timedelta(minutes=5):
    #Ensure that first authentication took place in the last five minutes
    del session['email']
    del session['email_time']
    flash('The login cookie has expired. Please try again', 'negative')
    return redirect(url_for('userbp.signin'))
user = User.query.filter_by(email=session['email']).first()
if user is None:
    abort(404)

从这里开始,我将根据用户选择的方法对用户进行身份验证。

我的问题是烧瓶会话变量是否足够安全以这种方式处理身份验证,如果不是,我怎么能安全地将用户信息传递到下一个视图。如果用户能够编辑会话变量,他们将能够通过第一次身份验证而无需知道密码。我考虑的其他事情是使用加密的URL令牌,可以在其他视图中解密。这会更安全吗?如果没有,我怎么能处理它更安全。

0 个答案:

没有答案