Lusca csrf 未按预期工作 - 使用旧令牌的 http 请求

Lusca csrf not working as expected - http request using old token

我试图在我的 Express.js 应用程序上使用 lusca 设置 CSRF 保护。不是这样的:

this.app.use(lusca({
      csrf: {
        cookie: {name: '_csrf'}
      },
      hsts: { maxAge: 31536000, includeSubDomains: true, preload: true },
      nosniff: true,
      referrerPolicy: "same-origin",
      xframe: "SAMEORIGIN",
      xssProtection: true,
    }));

在客户端如下:

const res = await axios.post(`${Constants.apiUrl()}/${Constants.paths.login}`, 
                credentials, {
                    withCredentials: true,
                    xsrfCookieName: '_csrf'
                });

在 server-side 上,我还设置了一些 headers 以便能够随请求发送 cookie - res.header('Access-Control-Allow-Credentials', 'true')

可能我遗漏了 CSRF 保护工作原理的一些重要部分。现在每次响应时,我都会收到新的 csrf token 但这意味着我的新 HTTP POST 请求发送的是之前已经过时的令牌。 我错过了什么?

经过3个小时的测试,终于找到了问题所在。您需要添加 csrf 的 secret。此外,如果您使用 Angular,则需要在 csrf 中添加 angular: true

this.app.use(lusca({
    csrf: {
        cookie: {name: '_csrf'},
        secret: 'qwerty'
    },
    hsts: { maxAge: 31536000, includeSubDomains: true, preload: true },
    nosniff: true,
    referrerPolicy: "same-origin",
    xframe: "SAMEORIGIN",
    xssProtection: true,
}));