使Loopback GET查询参数安全的最佳方法是什么?

时间:2018-01-31 13:00:24

标签: mongodb loopbackjs strongloop

我使用Loopback 3.x和loopback-connector-mongodb 3.x

显然,许多内置端点可以采用可以定义为JSON的过滤器参数,它可能包含复杂的过滤条件,如order,where,skip等。例如:

GET /api/activities/findOne?filter={"where":{"id":1234}}

然而,虽然Loopback使用ORM,但似乎请求参数传递给mongodb而没有任何预处理或转义。 我无法找到任何可以帮助我确保价值安全的Loopback API方法。 例如,如果用户将Javascript放入where过滤器,或添加不受支持的字符(例如null char),则应用程序会抛出异常退出。

我确定我在这里遗漏了一些东西。什么是使filter = {...}中传递的值安全的最佳方法? 是否有内置的API方法? 如果没有,我可以使用任何节点模块吗?

2 个答案:

答案 0 :(得分:0)

您可以创建一个mixin来验证您收到的JSON。

例如:

module.exports = function(Model, options) {
   Model.beforeRemote('find', (ctx, instance, next) => {
      // Validate the filter object
   }
}

答案 1 :(得分:0)

感谢帮助人员!

我关闭了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本身都没有为此提供任何解决方案,这真的很奇怪。我的意思是,这些参数是在框架代码中定义和处理的。有点疯狂,没有任何内置的逃避。