首页 > 解决方案 > 将 req.body 直接传递给 mongo db 时的安全性

问题描述

当我将 req.body 直接传递给数据库时(我使用 mongoose 和 nodejs),它是否考虑安全问题?

假设我有一个人模式(名称:字符串,年龄:数字),并且在 req.body 中,有人试图向其中添加一个额外的字段。在将它传递给 db 之前,我是否需要只提取我需要的字段

const {name, age} = req.body
const person = new Person({name, age})
person.save()...

或者这没关系,因为猫鼬已经处理好了

 const person = new Person(req.body)
    person.save()...

注意:我问的是额外的字段,而不是我们是否应该清理在模式中声明的字段

标签: node.jsmongoose

解决方案


不,这本身不是安全问题。
这也与猫鼬无关。那是纯JavaScript

您正在对参数使用解构赋值req.body,因此您正在提取精确指定的参数。

const body = { name: 'bob', age: 12,  malicious_entry: "rm -rf" };

let {name, age} = body;
console.log(name, age, malicious_entry)  // ReferenceError: malicious_entry is not defined

如果你将它传递给构造函数:

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}

let {name, age, malicious_entry} = body;
let person = new Person(name, age, malicious_entry);
console.log(person)  // Person { name: 'bob', age: 12 }

我让您选择是否要直接在数据库中记录互联网请求而不检查它,但显然额外的参数不是问题。


推荐阅读