我应该用猫鼬验证get参数吗

时间:2019-06-17 15:32:05

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

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

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方法。关于安全性,上述代码是否还不错?

1 个答案:

答案 0 :(得分:1)

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

  

UnhandledPromiseRejectionWarning:CastError:转换为ObjectId失败   模型“地图”的路径“ _id”处的值“ VALUE HERE”

如您所见,您可以传递一个实际的mongoDb ObjectId ,该字符串可以转换为一个有效字符串。猫鼬会产生CastError