【发布时间】:2014-09-25 22:20:08
【问题描述】:
我正在尝试使用 csurf 和 express 使 CSRF 保护工作。我的应用程序使用 Angular 作为前端,所以我认为将它添加到我的应用程序就足够了:
app.use(cookieParser('test secret'));
app.use(cookieSession({
secret: 'test secret'
}));
app.use(csrf({
cookie: {
key: 'XSRF-TOKEN'
}
}));
但是,当我尝试发出 POST 请求时,我收到 403(“无效的 CSRF 令牌”)错误。
据我所知,问题在于csrf-tokens 模块:在第44 行,expected 变量看起来像qMnHLQGhivxECx5WtwuktDNA-snimacq30z-XNh2X-KTpdlkU6Og,而secret 和token 变量看起来像qMnHLQGhivxECx5WtwuktDNA。由于expected和token不同,会出现403错误。
到目前为止,我已经尝试了以下方法:
- 在我的
csurf选项中设置secure: false和/或signed: true - 确保我的
cookie-session和cookie-parser中间件在csurf之前运行 - 重新安装我所有的
npm模块以防万一 - 对着我的电脑大喊大叫
我可以,可能,切换到基于会话的令牌,但这不会与 Angular 一样顺利,我不确定它是否能解决我的问题。
有谁知道如何解决这个问题,或者可能是什么原因?
PS 顺便说一句,我还注意到一个(可能不相关的)问题:req.csrfToken() 方法似乎返回的字符串的值与 @987654343 中的 expected 值完全无关@ 或存储在 cookie 中的字符串。
【问题讨论】:
-
您使用的是哪个版本的连接?这也有帮助mircozeiss.com/using-csrf-with-express-and-angular
-
我使用的是 Express 4.2.0,所以我根本没有使用 Connect。
-
我遇到了类似的问题,如果不是同样的问题。这里有任何解决方案吗?
-
老实说,我看不出你在做什么有任何明显的问题。可以试试github.com/pasupulaphani/angular-csrf-cross-domain/blob/master/…
标签: node.js angularjs express csrf