一种选择是一个隐藏的输入字段添加到您的所有形式你提到。但根据上CSRF快递文档:
缺省值功能检查由bodyParser()
中间件产生req.body
,通过query()
产生req.query
和"X-CSRF-Token"
报头字段。
因此,根据您的客户端框架,您也可以使用查询字符串或X-CSRF-Token
替代方案。
点仍然是你需要:
- 通过从快速的
_.csrf
令牌提供给您的客户端
- 返回从客户端的
_.csrf
令牌回到表达对您的所有状态突变的REC t(POST/PUT/DELETE),Express可以将其与req.session._csrf
进行比较以完成周期。
例如,如果您的客户端是棱角分明,在$http
模块默认提供了CSRF保护,寻找一个cookie称为XSRF-TOKEN
,并通过头部上的所有状态突变请求返回这个值(POST/PUT/DELETE)称为X-XSRF-TOKEN
。这是一个不幸的巧合,因为名称不同于Express查找它的标题名称,即X-CSRF-TOKEN
(通知-XSRF-
与-CSRF-
)。
为了克服这一点,你需要
步骤1:在快递方面增加了CSRF中间件寻找在X-XSRF-TOKEN
头中的令牌值的默认值的功能,除了所有其他默认地方:
app.use(express.csrf({value: function(req) {
var token = (req.body && req.body._csrf) ||
(req.query && req.query._csrf) ||
(req.headers['x-csrf-token']) ||
// This is the only addition compared to the default value function
(req.headers['x-xsrf-token']);
return token;
}
});
步骤2:在快递方面再次设置在cookie是角将寻找req.session._csrf
下由CSRF中间件添加的令牌值,使用自定义的中间件:
app.use(function(req, res, next) {
req.cookie('XSRF-TOKEN', req.session._csrf);
next();
});
现在Angular会找到它,并将其包含在X-XSRF-TOKEN
标题中,而无需采取任何进一步的操作。
我的意思是,我应该在所有现有的表单中放入'input(type ='hidden',name ='_ csrf',value = token)'? –