Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为单页应用程序使用Flask WTF CSRF保护?_Python_Flask_Csrf_Flask Wtforms - Fatal编程技术网

Python 如何为单页应用程序使用Flask WTF CSRF保护?

Python 如何为单页应用程序使用Flask WTF CSRF保护?,python,flask,csrf,flask-wtforms,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 = {"

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

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