python - 清理 MongoDB 的输入

标签 python json mongodb code-injection pymongo

我正在为 MongoDB 数据库程序编写一个 REST 接口(interface),并且我正在尝试实现搜索功能。我想公开整个 MongoDB 接口(interface)。我有两个问题,真的,但它们是相关的,所以我将它们放在一个帖子中:

  1. 使用 Python json 模块解码不受信任的 JSON 是否安全,或者它是否像 pickle 模块一样允许任意代码执行?
  2. 将解码后的 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/

相关文章:

ajax - 如何在node js中上传文件到api服务器?

java - Spring mongo 动态添加条件和操作符

mongodb - 错误 16755 - Mongo 无法提取地理键

python - 使用 pyodbc 在 mac 中将 Python 连接到 Teradata

Python 正则表达式(在一个字符串中搜索多个值)

java - 如何在 Java/Android 中迭代 Node.js 数据库查询结果

javascript - 如何将此 JSON 数据格式化为日期 (mm/dd/yyyy)

python - to_excel() read_excel() 出现 Pandas Unicode 导入导出错误

python - 将 pandas.core.groupby.SeriesGroupBy 转换为 dataframe

android - 在android中上传到服务器时获取java.lang.IllegalArgumentException