为了安全起见,我们是否需要在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对象。
- 如何仅使用mongodb nodejs驱动程序从文本search中返回选定的字段
- Mongodb tailable游标,高CPU使用率 – nodejs + mongodb
- mongoose – 总共添加“is_self”字段
- 如何将返回值推入数组mongodb?
- 为什么mongoose总是添加一个s到我的collections名称的末尾
- MongoDB / Mongoose有很多关系
- 在meteor束之后,node.js是“LISTENING”,但没有出现在本地主机上
- 将Update with Upsert设置为true时未设置默认值
- i18Next – NodeJS – 如何更改翻译,而无需重新加载服务器