一个Mongoose模型,Thing,有两个字段,其中一个(安全)应该可以通过mass assignment设置:
var db = require('mongoose');
var schema = new db.Schema({
safe: { type: String }, // settable through mass assignment
unsafe: { type: String } // not settable through mass assignment
});
db.model('Thing', schema);
控制器通过传递参数来设置Thing:
exports.create = function(req, res) {
var thing = new Thing(req.body);
// more...
};
攻击者可以尝试通过发出设置了unsafe的JSON POST请求来设置thing.unsafe。这应该被阻止。
如果类似Rails attr_accessible功能可用于Mongoose会很棒。我找到了mongoose-mass-assign,但这与我正在寻找的完全不同。首先,mongoose-mass-assign显然需要使用新的API(两个massAssign函数)。我想要传递params哈希值的任何本地Mongoose模型函数的质量赋值保护,例如,Thing构造函数和Thing.create函数。
如何获得Mongoose模型的质量分配保护?如果没有,Mongoose用户目前如何防范此漏洞?
答案 0 :(得分:1)
捂脸:
var thing = new Thing(req.body);
略显理智:
var okFields = {};
okFields.safe = req.body.safe
var thing = new Thing(okFields);
//Also helpful for longer whitelists from underscore: _.pick(req.body, "safe");
//Also feel free to add some, y'know, data validation either here or in mongoose
不要那样做。 Rails教你一个可怕的反模式。但是要回答你的问题,AFAIK mongoose和mongodb没有机制强制执行类似于rails的attr_accessible或任何受污染变量的概念。