使环回 GET 查询参数安全的最佳方法



我正在使用带有环回连接器-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
   }
}

最新更新