gpt4 book ai didi

node.js - 在 Mongoose 中更新/创建模型时,有什么理由将用户输入的数据列入白名单?

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:44 26 4
gpt4 key购买 nike

我发现自己在创建或保存用户之前这样做:

 var data = _.pick(req.body, 'email', 'name', 'username', 'title');

但我不知道是否真的有必要。例如,如果有人发送 salthashedPassword 或模型不支持的任何属性,会发生什么情况。难道就这样被扔掉了吗?

salthashedPassword 是我的架构上的虚拟属性。

假设有人发送了包含其他动态属性的 json 对象,例如 followers: ['fake1', 'fake2'] 等,那么不列入白名单似乎可能会很危险。如果我理解正确的话,覆盖之前添加的内容。

最佳答案

网络开发的经验法则是始终清理输入。

话虽如此,Mongoose 有一个选项 strict :

The strict option, ensures that values passed to our model constructor that were not specified in our schema do not get saved to the db.

在 Mongoose 2.x 中,严格的默认值为 false,但在 3.x 中,严格选项现在默认设置为 true。

您可以在架构上指定它:

new Schema({ .. }, { strict: true })

您也可以在您的模型上覆盖它:

var Thing = db.model('Thing');
var thing = new Thing(doc, true); // enables strict mode

虚拟属性永远不会被您提供到模型中的数据覆盖。这是因为 Mongoose 内部存储虚拟属性的方式。

架构中的每个属性都定义了其类型(虚拟属性具有 VirtualType)。虚拟属性在内部存储在与“真实”属性不同的对象中。

当您访问虚拟属性时,Mongoose 将检查属性类型并调用该属性类型的 getter(基本上,调用您为虚拟属性定义的函数)。

关于node.js - 在 Mongoose 中更新/创建模型时,有什么理由将用户输入的数据列入白名单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24227958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com