在使用npm csurf时,我是否应该能够在同一会话中重用csrf令牌?

时间:2016-12-13 11:31:04

标签: node.js express csrf

使用csurf时,我注意到如果我提供 以前生成并使用 的csrf令牌,它仍然被接受为有效令牌(在同一会议)。

应该是这种情况还是我使用它错了?我原以为使用过的csrf令牌会失效(因此每个会话ID只能使用一次)。

我的代码看起来像这样:

var express = require('express');
var bodyParser = require('body-parser');
var csurf = require('csurf');
app.use(csurf());
app.use(function (req, res, next) {
  res.locals.csrfToken = req.csrfToken();
  next();
}); 

1 个答案:

答案 0 :(得分:1)

根据OWASP:“同步器(CSRF)令牌(是)每个用户会话的唯一性”,我认为它们与会话相关联。这意味着可以从同一会话中重用令牌。因此问题的答案是'是'。

似乎npm csurf正在使用标准的最佳做法,允许在同一个会话中重复使用csrf令牌(即使它们已被消耗一次)。

OWASP的相关部分:

同步器(CSRF)令牌

  

任何状态更改操作都需要安全的随机令牌(例如,   CSRF令牌)以防止CSRF攻击

CSRF令牌的特征

  • 每个用户会话的唯一身份
  • 大随机值
  • 由加密安全随机数生成器生成
  

CSRF令牌被添加为表单或URL中的隐藏字段   如果状态更改操作通过GET发生服务器拒绝   如果CSRF令牌未通过验证,请求的操作