为了安全起见,我们是否需要在Mongoose中压缩或过滤用户查询?

作为一个很长时间的networking开发,我平常的答案是使用正则expression式检查来压缩用户input。 当我在看Mongoose查询时,我的直觉告诉我,我不一定非要紧张的input,假设一个长度检查也许。

这是假设明确的框架已经过滤了req.body或req.query的input。

例如,一个典型的查询可能就像在Mongoose中那样:

User.findOne({ username : req.query.username }, function(err, doc) { // code }); 

是否有可能注入不好的东西到这个特定的查询? 我希望是的,因为看起来黑客总是使用非常聪明的东西,但是希望看到一些这样的例子。 我问这个,因为这是不同于其他方式做这个不做string连接,而是使用已经是一个string或未定义的对象。 谢谢!

请移动这个,如果它的话题,我提前道歉,因为我不知道在哪里问这个。

req.query.username是一个你期望的值(比如一个string)是安全的。 它不会尝试评估其中的任何JSON。 如果req.query.username是一个像例如{ '$exists': true } ,它将被评估并返回意外的文档。

你的findOne例子是相当'安全的',因为你会错误的validation密码。 像.remove()这样的其他查询会更加危险。

 var param = { '$exists': true }; User.remove({ username : param }, function (err, affected) { console.log(err) console.log(affected) }); 

这将删除集合中的所有用户:

这有帮助吗?


编辑:

使用PHP和Mongo时也有类似的问题。 它的大部分将取决于expression框架不从input参数创build对象。