【问题标题】:Should I validate get parameter with mongoose我应该用猫鼬验证get参数吗
【发布时间】:2019-06-17 15:32:05
【问题描述】:

在我的路由中,我收到了请求:

router.get('/getOne', auth(), mapController.getOne);

我在 url 中传递 id 参数并在 mapController 中使用 mongoose 进行 mongo 查询,如下所示:

exports.getOne = async(req, res, next) => {
    try {
        const mapData = await Map.findById(req.query.id);
        res.json(mapData);
    } catch (e) {
        return next(e);
    }
};

以前我在使用 PHP 时会转义参数以避免 sql 注入。在这里,我没有做任何类似的事情,我只是将req.query.id 直接传递给findById 方法。在安全方面,上述代码是否一切正常?

【问题讨论】:

标签: javascript node.js security mongoose code-injection


【解决方案1】:

在这种情况下,Mongoose 会检测到您正在传递一个字符串,并在内部尝试将其转换为 mongodb ObjectId。如果失败,它将不会运行查询。你会得到的错误是:

UnhandledPromiseRejectionWarning: CastError: Cast to ObjectId 失败 对于模型“Map”的路径“_id”处的值“VALUE HERE”

如您所见,您可以传递一个实际的 mongoDb ObjectId 一个可以转换为一个的有效字符串。其他任何东西都会产生 Mongoose 的 CastError

【讨论】:

  • 没错。我看到了他们标记为 dup 的链接,但在答案中,有 19+ 他说,例如,当我们有登录发布请求时,用户可以发送密码,如{ $ne: 1 },但这是对象而不是字符串。当我将我的内容类型指定为 application/json 时,我真的不知道用户是否可以以某种方式欺骗它。 AFAIK 他不能注入任何 js
猜你喜欢
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多