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,
}));
我试图在我的 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,
}));