我正在为 MongoDB 数据库程序编写一个 REST 接口(interface),并且我正在尝试实现搜索功能。我想公开整个 MongoDB 接口(interface)。我有两个问题,真的,但它们是相关的,所以我将它们放在一个帖子中:
- 使用 Python json 模块解码不受信任的 JSON 是否安全,或者它是否像 pickle 模块一样允许任意代码执行?
- 将解码后的 JSON 传递给 PyMongo find() 函数是否安全?
最佳答案
Python 的 JSON 模块应该可以安全地与不受信任的输入一起使用,至少在其默认配置中是这样(即您没有提供任何自定义解码器,这些解码器中可能存在漏洞)。
但是,我们不能肯定地说 json.loads()
的结果可以安全地传递给 pymongo 的 find()
方法。虽然 find()
方法不会修改(更新或删除)mongodb 中的数据,但可以故意制作性能非常差的查询,如下面使用特制的 $where
子句创建非常差的性能特征:
{"$where": "function() { for (var i=0; i<1000000; i++) {}; return true; }"}
请注意,这既是有效的 JSON,也是有效的 mongodb 查询。
出于这个原因,我不允许将用户制作的 JSON 直接用作对 mongodb 的查询,除非您的用户都是可信的(即您直接控制的客户端,例如应用程序中的其他服务器/组件) .
关于python - 清理 MongoDB 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7278238/