我面临一个非常烦人的问题,即
CSRF
安全令牌在使用后并未失效。
我尝试使用相同的值和 csrf 令牌多次提交表单,但它有效。然而,我应该收到
403
错误。
import csrf from 'csrf';
import express from 'express';
...
const App = express();
// CSRF tokens
const tokens = new csrf({ cookie: true });
const csrfToken = tokens.secretSync({ saltLength: 128 });
App.use((req, res, next) => {
...
// Validating CSRF token
if (
(['get', 'options'].includes(req.method.toLowerCase()) === false) &&
! tokens.verify(csrfToken, req.body._csrf) &&
! tokens.verify(csrfToken, req.headers['x-csrf-token'])
) {
throw new Error('CSRF: Invalid or missing token');
}
req.csrfToken = tokens.create(csrfToken);
next();
});
...
控制器.js
const csrfToken = async (req, res) => await res.json({
csrf: req.csrfToken
});
export {
csrfToken,
};
看来我有一个错误的印象,
API's
数据提交路径,例如:POST
,PUT
,PATCH
等,也应该用CSRF
令牌来保护,以增强安全性,就像通过浏览器窗口发布表单一样。
但是,在寻找这个问题的答案时,我发现与通过网络浏览器提交表单不同,api 数据提交不需要
csrf
保护,因为它们通常不依赖 cookie 来确保身份用户。
如果您想了解更多信息,请点击此问题链接