使用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();
});
答案 0 :(得分:1)
根据OWASP:“同步器(CSRF)令牌(是)每个用户会话的唯一性”,我认为它们与会话相关联。这意味着可以从同一会话中重用令牌。因此问题的答案是'是'。
似乎npm csurf正在使用标准的最佳做法,允许在同一个会话中重复使用csrf令牌(即使它们已被消耗一次)。
OWASP的相关部分:
同步器(CSRF)令牌
任何状态更改操作都需要安全的随机令牌(例如, CSRF令牌)以防止CSRF攻击
CSRF令牌的特征
CSRF令牌被添加为表单或URL中的隐藏字段 如果状态更改操作通过GET发生服务器拒绝 如果CSRF令牌未通过验证,请求的操作