Node.js:CSRF 在使用后不会失效

问题描述 投票:0回答:1

我面临一个非常烦人的问题,即

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,
};

node.js csrf csrf-token
1个回答
0
投票

看来我有一个错误的印象,

API's
数据提交路径,例如:
POST
PUT
PATCH
等,也应该用
CSRF
令牌来保护,以增强安全性,就像通过浏览器窗口发布表单一样。

但是,在寻找这个问题的答案时,我发现与通过网络浏览器提交表单不同,api 数据提交不需要

csrf
保护,因为它们通常不依赖 cookie 来确保身份用户。

如果您想了解更多信息,请点击此问题链接

© www.soinside.com 2019 - 2024. All rights reserved.