【发布时间】:2015-02-08 00:43:18
【问题描述】:
我想在使用 MEAN 堆栈的应用中添加 CSRF 保护。
我尝试了某人已经给出的答案:CSRF Protection in ExpressJS
但这是针对较旧的 express 版本,所以我做了一些更改:
app.use(cookieParser(config.cookieSecret, { httpOnly: true }));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({ secret: config.sessionSecret, resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(csrf({value: function(req) {
var token = (req.body && req.body._csrf)
|| (req.query && req.query._csrf)
|| (req.headers['x-csrf-token'])
|| (req.headers['x-xsrf-token']);
return token;
}
}));
app.use(function(req, res, next) {
res.cookie('XSRF-TOKEN', req.csrfToken());
next();
});
我可以看到名为 XSRF-TOKEN 的令牌在我的应用程序上生成良好(使用 Chrome 检查)。
但是当我发布表单(Angular 前端)时,我有一个关于令牌的错误:
{"message":"invalid csrf token","error":{"expose":true,"code":"EBADCSRFTOKEN","statusCode":403,"status":403}}
我错过了什么吗?我想知道req.csrfToken() 是否会生成 Angular 给出的良好令牌...
编辑:
我只看到XSRF-TOKEN 被AngularJS 在$http 请求中使用仅。所以我想我必须在我的表单中添加一个隐藏的输入来发布带有 csrf 值的帖子,以便由 Express 进行检查,但是如何?
【问题讨论】:
标签: angularjs cookies express csrf passport.js