Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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
Javascript 为什么不';更新版本的节点是否从请求正文中删除?_Javascript_Node.js_Express_Body Parser - Fatal编程技术网

Javascript 为什么不';更新版本的节点是否从请求正文中删除?

Javascript 为什么不';更新版本的节点是否从请求正文中删除?,javascript,node.js,express,body-parser,Javascript,Node.js,Express,Body Parser,当我向express服务器发送一个PUT请求时,req.body有时有一个\uuuu proto\uuu属性,而其他时候没有 使用节点0.10.26和express 3.2.3: 当我把{code>{a:“b”,“{u proto}}}放进去时 然后req.body是{a:“b”} 使用节点4.1.0和express 3.2.3: 当我把{code>{a:“b”,“{u proto}}}放进去时 然后req.body是{a:“b”,“proto:{} 因此,较新版本的node不会剥离\u

当我向express服务器发送一个
PUT
请求时,
req.body
有时有一个
\uuuu proto\uuu
属性,而其他时候没有

使用节点0.10.26和express 3.2.3

  • 当我把{code>{a:“b”,“{u proto}}}放进去时
  • 然后
    req.body
    {a:“b”}
使用节点4.1.0和express 3.2.3

  • 当我把{code>{a:“b”,“{u proto}}}放进去时
  • 然后
    req.body
    {a:“b”,“proto:{}
因此,较新版本的node不会剥离
\uuuu proto\uuu
属性。我真的很喜欢这种行为;现在我必须编写自己的中间件来剥离属性。我认为这与
bodyparser
有关。然而,奇怪的是,两个测试都有相同版本的
express
(因此也有相同版本的
bodyparser


有人能给出改变的动机吗?解决此问题的建议方法是什么?

express和node都不对此行为负责。这实际上在很久以前的V8中就已经更改,以实现兼容性和规范一致性

  • 旧行为(
    \uuuuuuuuuuuuuuuuuu
    被剥离):

  • 新行为(
    \uuuuuuuuuuuuuuuu
    未剥离):

资料来源:

解决方案: 正如您所说,您可以自己编写一个简单的中间件来剥离属性:

function stripProto(req, res, next) {
  delete req.body.__proto__;
  next();
}
// ...
app.use(stripProto);

哦,这就是为什么我的谷歌搜索没有找到任何东西。谢谢你的澄清!Use可以将body解析器作为单独的模块使用。
> var x = JSON.parse('{"__proto__":[]}');
> x.hasOwnProperty('__proto__');
true
function stripProto(req, res, next) {
  delete req.body.__proto__;
  next();
}
// ...
app.use(stripProto);