Javascript 单页应用程序cookie中的Csrf令牌池?

Javascript 单页应用程序cookie中的Csrf令牌池?,javascript,csrf,csrf-protection,Javascript,Csrf,Csrf Protection,我的应用程序是单页应用程序。除了第一页加载(index.html/php)和基于前端的模板之外,客户机-服务器通信是通过ajax API运行的。服务器上唯一有效的响应是json 每个表单提交都使用javascript进行处理 服务器令牌验证不是此问题的一部分 我的第一个流 用户输入页面,其中csrf令牌作为一些html值 Javascript选择标记并将其另存为Javascript变量 当用户通过应用程序时,每个后端请求(POST)javascript都会附加csrf令牌。响应中存在新的csr

我的应用程序是单页应用程序。除了第一页加载(index.html/php)和基于前端的模板之外,客户机-服务器通信是通过ajax API运行的。服务器上唯一有效的响应是json

每个表单提交都使用javascript进行处理

服务器令牌验证不是此问题的一部分

我的第一个流

  • 用户输入页面,其中csrf令牌作为一些html值
  • Javascript选择标记并将其另存为Javascript变量
  • 当用户通过应用程序时,每个后端请求(POST)javascript都会附加csrf令牌。响应中存在新的csrf令牌
但这个流程有一个问题,一旦用户打开另一个窗口,csrf令牌将对上一个窗口无效

我的第二个流程

  • 用户输入页面,csrf令牌作为cookie出现
  • 当用户浏览应用程序时,通过每个后端请求(POST)javascript从cookie中选择csrf令牌并将其附加到请求中
  • 请求完成后,服务器更改cookie值
(注意,在此流中,服务器不会验证cookie本身,而是验证我们从cookie中获取的值。)

这个流程稍微好一点,用户可以打开多个窗口,但此时仍然只有一个请求有效

我的第三个流

它和第二个流相同,但服务器提供了令牌池,而不是一个csrf令牌。用户只能根据池的大小请求尽可能多的请求(实现者选择)。请求一次只使用一个令牌,并且该令牌被标记为“正在使用”。每次请求到达服务器时,服务器都会使用新值续订池中的csrf令牌

问题: 你认为第二流和第三流是安全的吗?还是有办法欺骗它? 第三个流是否“应用程序持久化”?