CSRF令牌在运行时延长令牌到期

时间:2018-07-12 05:51:26

标签: python ajax flask csrf flask-wtforms

我有一个现有的Flask应用程序,该应用程序广泛使用ajax请求来更改数据和页面。有许多动作会向服务器发出ajax请求,以修改和更改数据。

应用程序使用flask-wtf CSRF来防止跨站点Requst伪造。我的CSRF令牌的到期时间为60分钟。

现在,如果用户在选项卡中打开页面的时间超过一个小时,并提交了CSRF验证失败的表格,则抛出错误。

我想知道在我提出ajax请求时是否可以延长CSRF令牌的到期时间。

我当前的骇客:

现在我正在考虑拥有一个 csrf_fail_handler 函数,该函数可以在前一个失败时生成一个新的CSRF令牌,并在响应中将其发送为某些唯一状态代码。

然后,我的ajax响应处理程序功能可以检查响应中的状态代码并更新_csrf_token字段。

像这样的苏富美:

Python代码

@csrf.error_handler
def csrf_error(reason):
    return render_template('csrf_error.html', reason=reason), 701 # my unique resposne code

csrf_error.html

{"_csrf" : {{csrf_token() }} }

针对ajaxError的jQuery ajax全局处理程序:

$( document ).ajaxError(function( x, response) {
  if ( x.status == 701 ) {
    $( "#csrf_token" ).val( response._csrf);
    $('#notifiy').text("Please Retry").show();      
  }
});

这将给我新的CSRF令牌,以在前一个令牌失败时作出响应。然后在我的ajax处理程序中。

我想知道什么是最好的方法?这会影响安全性吗?

注意: 我知道最好的解决方案就是增加配置文件中CSRF的到期时间。但是,客户认为,如果到期时间超过一个小时,则可能是安全漏洞。

0 个答案:

没有答案