【问题标题】:How to use Flask-WTF CSRF protection for Single Page Apps?如何为单页应用使用 Flask-WTF CSRF 保护?
【发布时间】:2015-11-27 16:56:35
【问题描述】:

我注意到 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。

【问题讨论】:

    标签: python flask csrf flask-wtforms


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-05-24
      • 2017-08-17
      • 2014-02-25
      • 2015-10-31
      • 1970-01-01
      • 2020-01-15
      • 2018-07-10
      • 2020-09-26
      • 2017-05-14
      相关资源
      最近更新 更多