在我的nodeJs应用程序中,我正在使用相当多的Ajax调用,并希望防范这些调用以防止CSRF攻击。
我正在使用csurf,只要请求是正常请求,它就可以正常工作。在这种情况下,我们所需要做的只是将令牌从路径传递到视图并将其嵌入到您的表单中。当使用令牌提交表单时,csrf负责处理它。如果不匹配则显示无效的csrf令牌错误。
但是当谈到Ajax调用时无法弄清楚如何做到这一点来保护那些ajax调用,这是我在google搜索几个小时后必须知道的。因为我们需要一个令牌来进行Ajax调用,可以添加在每个Ajax调用中,我们必须找到csrf令牌并将其添加到请求头或主体i,e有效负载。
使用中间件将令牌保存在您的回复中。
var csrf = require('csurf');
var csrfToken = csrf();
......some code here
app.use(csrfToken);
app.use(function (req, res, next) {
res.locals._csrf = req.csrfToken();
next();
});
我们需要将它添加到布局或其他东西,以便我们可以为每个Ajax调用获取它。
<head>
<title>{{title}}</title>
<meta name="_csrf" content="{{_csrf}}"/>
....
</head>
为了在Ajax调用中设置令牌,我做了类似的事情。
var csrf_header = 'X-CSRF-Token';
var setToken = function (securityToken) {
jQuery.ajaxPrefilter(function (options, _, xhr) {
if (!xhr.crossDomain) {
xhr.setRequestHeader(csrf_header, securityToken);
}
});
};
将令牌添加到请求标头或继续将其添加到请求主体是否明智?
到目前为止,我很好,但我们如何验证我们将在服务器上发送的令牌。
任何帮助或任何指针将非常感谢!!