如何对单页应用程序使用Flask-WTF CSRF保护?

时间:2015-09-02 09:00:07

标签: python flask csrf flask-wtforms

我注意到Flask-WTF生成的令牌在一小时后到期,每次请求都会生成另一个令牌。当页面打开超过一小时时,这将导致SPA中的问题。页面加载后一小时后发出的XHR请求将开始失败,即使用户处于活动状态。

我的解决方法是在每个API调用中在浏览器中设置一个新令牌。在服务器中,所有API响应都包含一个新生成的令牌:

from flask_wtf.csrf import generate_csrf

def api_response(data, error=None):
    response = {"csrftoken": generate_csrf(), "data":data}
    ...
    return make_response(jsonify(response), response_code)

在浏览器中,我们在每个API响应上设置了csrftoken。

then(function(result) {
    if(result.csrftoken) csrftoken=result.csrftoken;
    callback(result);
  })

这种方法仍然安全快捷吗?有没有更好的方法来处理这个?我不太确定直接使用generate_csrf。

1 个答案:

答案 0 :(得分:1)

不,没有其他方法可以在Flask-WTF中使用CSRF保护。当您需要CSRF令牌时,您需要生成一个并使用它。像你一样生成它应该没有问题。它仍然在服务器上以相同的方式生成和验证,并通过相同的通道传输到客户端。