Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 获取禁止错误:无效的csrf令牌,在本地将multer添加到映像上载路由器_Node.js_Express_Security_Csrf_Multer - Fatal编程技术网

Node.js 获取禁止错误:无效的csrf令牌,在本地将multer添加到映像上载路由器

Node.js 获取禁止错误:无效的csrf令牌,在本地将multer添加到映像上载路由器,node.js,express,security,csrf,multer,Node.js,Express,Security,Csrf,Multer,我在Express应用程序中建议使用csurf来防止跨站点伪造。我已经在全球范围内注册了它(用下面的代码说明),到目前为止效果良好 现在,我添加了multer.js以便能够上传图像,正如他们的文档所建议的那样,将multer连接到您打算使用的每条快速路线上更安全 现在,当我将multer附加到我的上传路由时,我面临一个“禁止的错误:无效的csrf令牌”,我真的不知道为什么,在我看来,我提交的表单是作为csrf令牌附加到它的 下面是我的代码,如果有任何帮助/建议,我将不胜感激。谢谢大家 app.j

我在Express应用程序中建议使用csurf来防止跨站点伪造。我已经在全球范围内注册了它(用下面的代码说明),到目前为止效果良好

现在,我添加了multer.js以便能够上传图像,正如他们的文档所建议的那样,将multer连接到您打算使用的每条快速路线上更安全

现在,当我将multer附加到我的上传路由时,我面临一个“禁止的错误:无效的csrf令牌”,我真的不知道为什么,在我看来,我提交的表单是作为csrf令牌附加到它的

下面是我的代码,如果有任何帮助/建议,我将不胜感激。谢谢大家

app.js routes.js
我猜问题在于,当您上载文件时,请求的内容类型会变成
多部分/表单数据
,并且您不能再简单地将csrf令牌传递到正文中进行表示

不过API允许在URL中传递它。尝试在
\u csrf
参数中传递令牌,我认为这应该可以解决您的问题。因此,只需将表单发布到
../?\u csrf={your\u token}
。但请注意,这比在请求正文中传递csrf令牌的安全性稍差,并且如果您有可能在以后的渗透测试中被标记为潜在漏洞

或者,为了更安全一点,您也可以将其作为请求头传递,但在客户端这可能有点棘手。根据,Express将从以下位置获取代币:

req.body._csrf - typically generated by the body-parser module.
req.query._csrf - a built-in from Express.js to read from the URL query string.
req.headers['csrf-token'] - the CSRF-Token HTTP request header.
req.headers['xsrf-token'] - the XSRF-Token HTTP request header.
req.headers['x-csrf-token'] - the X-CSRF-Token HTTP request header.
req.headers['x-xsrf-token'] - the X-XSRF-Token HTTP request header.
因此,添加
csrf令牌
头也应该有效


免责声明:我根本不知道multer.js,对Express也没有什么经验。

你检查过吗?@boolfalse谢谢你的参考,但是,这个案例与我现在经历的不一样。csrf在我的应用程序中工作得非常好,只有在我为上传图像而创建的路由中添加multer.js时,它才成为一个问题。正如我在上面的代码中所显示的那样,只要我删除multer,它就可以完美地工作。你知道为什么吗?multer是否抛出了一个触发csrf令牌无效错误的错误?非常感谢您的输入!我目前正在旅行,并将尽快应用您的建议。希望将令牌发送回服务器的不同方法之一能够修复它。
const express = require('express')
const router = express.Router();

const multer = require('multer');
const controllers = require('../Controllers/shop');

router.post('/upload', multer({storage: multer.memoryStorage(), fileFilter: fileFilter), controller.uploadFunction);
req.body._csrf - typically generated by the body-parser module.
req.query._csrf - a built-in from Express.js to read from the URL query string.
req.headers['csrf-token'] - the CSRF-Token HTTP request header.
req.headers['xsrf-token'] - the XSRF-Token HTTP request header.
req.headers['x-csrf-token'] - the X-CSRF-Token HTTP request header.
req.headers['x-xsrf-token'] - the X-XSRF-Token HTTP request header.