javascript - 内部调用 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) => {
res.json({ csrfToken: req.csrfToken() });
});
在向该服务器发出请求之前必须先调用它。
现在,我有另一个后端微服务正在对一个端点进行 API 调用,我不想在后端服务调用端点时启用 csrf 检查。但是如果它来自其他地方,想要保留检查。
什么方法适合我的情况?
解决方案
如果您的应用程序中确实需要 CSRF,那么您可能不应该禁用它。话虽如此,您可以使用自定义中间件为您的路由选择可选的 CSRF:
import csrf from 'csurf';
const csrfProtection = csrf({
cookie: {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
},
});
function optionalCSRF(req, res, next) {
if (req.query.disableCSRF === 'true') {
return next();
}
csrfProtection(req, res, next);
}
app.use(optionalCSRF);
推荐阅读
- docker - 如何修复“gpg:找不到有效的 OpenPGP 数据”。运行“add-apt-repository”时出错
- vue.js - 即使规则中有规定,Webpack 也没有解析模块
- java - 如何使用 LWJGL 的 LZ4 绑定来压缩和解压
- android - 如何修复 - 错误:“0f”与属性 alpha (attr) float 不兼容。错误:链接文件资源失败
- javascript - 并排订购选定的图像 - EXTJS
- ios - React Native 包装器,其中包含 ios sdk,但在包中无法访问
- java - 如何从列表中获取总和为数字的元素
- android - 如何使整个 ListView 可点击
- angular - 如何在与项目不同的目录中生成角度库?
- javascript - 我想从本地存储中删除一个项目