我正在使用带有环回连接器-mongodb 3.x 的环回 3.x
显然,许多内置端点可以采用可以定义为JSON的过滤器参数,并且可能包含复杂的过滤条件,如顺序,位置,跳过等。例如:
GET /api/activities/findOne?filter={"where":{"id":1234}}
然而,尽管环回使用ORM,但似乎请求参数被传递给mongodb,没有任何预处理或转义。我找不到任何可以帮助我确保值安全的环回 API 方法。例如,如果用户将 Javascript 放入 where 筛选器,或添加不受支持的字符(如 null char(,则应用会引发异常退出。
我确定我在这里错过了一些东西。使 filter={...} 中传递的值安全的最佳方法是什么?是否有内置的 API 方法?如果没有,是否有任何节点模块可供我使用?
谢谢你们的帮助!
我在MongoDB中关闭了Javascript,并编写了一个小中间件来处理转义。这是在 middleware.json 中注册的,因此它会在每个请求之前运行并转义值。
module.exports = function createEscaper(options) {
return function queryEscape(req, res, next) {
if (req.query.filter) {
// escape various things and update the value..
}
next();
};
}
但是我觉得很奇怪,MongoDB连接器和Loopback本身都没有为此提供任何解决方案。我的意思是,这些参数是在框架代码中定义和处理的。这有点疯狂,没有任何内置的逃脱。
您可以创建一个 mixin 来验证您收到的 JSON。
例如:
module.exports = function(Model, options) {
Model.beforeRemote('find', (ctx, instance, next) => {
// Validate the filter object
}
}