node.js - 将 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()...
注意:我问的是额外的字段,而不是我们是否应该清理在模式中声明的字段
解决方案
不,这本身不是安全问题。
这也与猫鼬无关。那是纯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 }
我让您选择是否要直接在数据库中记录互联网请求而不检查它,但显然额外的参数不是问题。
推荐阅读
- python - 我的 Coursera 问题
- c++ - 有没有办法避免重复“模板
“? - oracle - Oracle DB:计划作业失败并出现错误:ORA-06576:不是有效的函数或过程名称
- python - 如何从 API 获取数据并在 pandas.DataFrame 中正确排列它们
- java - MVC:模型或控制器/视图中的坐标和形状方法?
- css - 如何在带有ruby on rails的伪元素中显示来自svg sprite的图标
- laravel - 发生错误:ArtisanLambdaFunction - 解压后的大小必须小于 220606645 字节(服务:Lambda,状态码:4000
- mongodb - 如何使用 mongodb 在环回 4 中实现 groupBy?
- react-native - 从图库中获取图像的 url 并将图像从设备转换为 tensor3d
- git - 如果不存在标签,则获取第一次提交