Javascript 在内部调用快速路线时禁用csrf

Javascript 在内部调用快速路线时禁用csrf,javascript,node.js,express,csrf,Javascript,Node.js,Express,Csrf,我有以下简单的代码来启用csrf保护 import csrf from 'csurf'; const csrfProtection = csrf({ cookie: { httpOnly: true, secure: process.env.NODE_ENV === 'production', }, }); app.use(csrfProtection); 这意味着所有应用程序路由都在使用中间件 router.get('/auth/csrf', (req, res

我有以下简单的代码来启用csrf保护

import csrf from 'csurf';

const csrfProtection = csrf({
  cookie: {
    httpOnly: true,
    secure: process.env.NODE_ENV === 'production',
  },
});


app.use(csrfProtection);
这意味着所有应用程序路由都在使用中间件

router.get('/auth/csrf', (req, res) => {
  res.json({ csrfToken: req.csrfToken() });
});
必须在向此服务器发出请求之前先调用

现在,我有另一个后端微服务正在对一个端点进行API调用,我不想在后端服务调用端点时启用csrf检查。但是如果它是从其他地方来的,我想保留这些支票


什么方法适用于我的案例?

如果您的应用程序中确实需要CSRF,那么您可能不应该禁用它。话虽如此,您可以使用自定义中间件为您的路由提供可选的CSRF:

从“csurf”导入csrf;
常数csrfProtection=csrf({
曲奇:{
httpOnly:true,
安全:process.env.NODE_env==='production',
},
});
功能选项CSRF(请求、恢复、下一步){
如果(req.query.disableCSRF==='true'){
返回next();
}
CSRF保护(req、res、next);
}
应用程序使用(可选CSRF);

CSRF用于防止机器人攻击。如果你为一个特定的机器人设置了后门(也称为你的后端服务),那么你也会削弱对其他机器人的保护。IP白名单是一种可能的方法。这是非常常见的网站白名单谷歌机器人的IP地址(和其他著名的机器人),以便他们可以爬网,但仍然阻止其他机器人的交通,例如,如果我不应该禁用它,如何能提供csrf,同时提出内部要求?有一些服务可以使用的预定义值有意义吗?我对面向公众的应用程序不是很有经验,但我想到了一些想法。您可以想出一种方法,让您的后端服务为每个请求生成自己的令牌(并将它们存储在API服务可以访问的地方),并且如果提供了令牌,您的API服务可以验证令牌。您可以删除CSRF并改为添加Google的reCaptcha吗?这将更加安全。但这当然不能回答如何识别您自己的后端服务:)