当前位置: 首页 > 面试题库 >

直接从URL查询字符串提供的mongo查询有多危险?

陆浩博
2023-03-14
问题内容

我在玩node.js,express和mongoose。

为了立即启动并运行,我将Express查询字符串对象直接传递给mongoose
find函数。我很好奇的是,这种做法在实时应用中会有多危险。我知道RDBMS极易受到SQL注入的攻击。除了“清理您的输入”的好建议之外,这段代码有多邪恶:

app.get('/query', function (req, res) {
    models.findDocs(req.query, function (err, docs) {
            res.send(docs);
        });
});

这意味着获取请求http://localhost:8080/query?name=ahsteele&status=a只会将以下内容推送到findDocs函数中:

{
  name: 'ahsteele',
  status: 'a'
}

由于种种原因,这感觉很不好,但是它有多不安全?将查询参数传递给mongodb的最佳实践是什么?快递提供开箱即用的消毒服务吗?


问题答案:

就注入问题而言,就像SQL一样,风险明显更低……尽管理论上可以通过未知的攻击媒介来实现。

数据结构和协议是二进制的,并且由API驱动,而不是利用特定于域的语言中的转义值。基本上,您不能只是诱使解析器在末尾添加“;
db.dropCollection()”。

如果仅用于查询,则可能很好…但是我仍然提醒您使用一点验证:

  • 确保仅字母数字字符(过滤或使null无效以及您通常不接受的其他任何字符)
  • 强制每个术语使用最大长度(例如255个字符)
  • 强制执行整个查询的最大长度
  • 删除以“ $”开头的 特殊 参数名称,例如“ $ where”&这样
  • 不允许嵌套数组/文档/哈希…仅字符串和整数

另外,请记住,空查询将返回所有内容。您可能想要限制该返回值。:)



 类似资料:
  • 问题内容: 我需要的是将URL 的值转换成变量,然后在jQuery代码中使用它: 有谁知道如何使用JavaScript或jQuery来获取该价值? 问题答案: 这就是你所需要的:) 以下代码将返回一个包含URL参数的JavaScript对象: 例如,如果您具有URL: 此代码将返回: 您可以执行以下操作:

  • 问题内容: 从Java脚本的路径中删除查询字符串的简便方法是什么?我已经看到了使用window.location.search的Jquery插件。我不能这样做:在我的情况下,URL是从AJAX设置的变量。 问题答案: 一个简单的方法是: 对于那些还希望在不存在querystring的情况下删除哈希(不是原始问题的一部分)的人,需要做更多的工作: 编辑 @caub(最初为@crl)建议了一个更简单的

  • 我想它一定是在请求体。我如何发送‘更新’查询或我做错了?

  • 我想它一定在请求的身体里。我如何发送“更新”查询或我做错了?

  • 使用php或javascript或regex,是否有一个快速(希望是一行程序)从前一个(引用者)URL获取查询字符串? 从第二页...我想知道前面的查询字符串“One”。

  • 问题内容: 用户可以在我的网站上使用HTML表单输入URL,因此他们可以输入以下内容:http : //www.example.com?test=123&random=abc,可以是任何内容。我需要提取某个查询参数的值,在本例中为“ test”(值123)。有没有办法做到这一点? 问题答案: 你可以用与这样的: 允许将URL分为不同的部分(方案,主机,路径,查询等);在这里,我们使用它仅获取查询(