Python 中的 NoSql 注入

2024-01-11

当试图提出这个问题时,我得到了this one https://stackoverflow.com/questions/4167077/mongodb-injection它使用的是Java,并且在答案中给出了一个Ruby示例,并且似乎只有在使用Json时才会发生注入?因为我有一个公开内容,我将尝试比较 NoSQL 和 SQL,我想说的是:高兴点,nosql 没有 sql 注入,因为它不是 sql ...

你能解释一下吗:

  • 使用 Python 驱动程序 (pymongo) 时如何发生 SQL 注入。
  • 如何避免它。
  • 使用登录表单中的注释的旧方式 sql 注入进行比较。

MongoDB 中的注入有几个问题:

  • $whereJS 注入 - 根据用户输入构建 JavaScript 函数可能会导致查询的行为与您的预期不同。一般来说,JavaScript 函数不是一种负责任的 MongoDB 查询编程方法,除非绝对需要,否则强烈建议不要使用它们。
  • 操作员注入 - 如果您允许用户(从前面)构建$or或者他们可以轻松操纵这种能力来更改您的查询。如果您只是从一组文本字段中获取数据并手动构建一个$or从该数据中。
  • JSON 注入 - 最近有相当多的人尝试将从某些客户端源发送的完整 JSON 文档(讽刺的是,首先在 JAVA 中看到这个)转换为插入到 MongoDB 中的文档。我什至不需要探究为什么这很糟糕。字段的 JSON 值很好,因为 MongoDB 当然是 BSON。

正如 @Burhan 所说,注入来自未经净化的输入。幸运的是,MongoDB 具有面向对象的查询功能。

SQL注入的问题来自于“SQL”这个词。 SQL 是一种由字符串组成的查询语言。另一方面,MongoDB 实际上使用 BSON 文档来指定查询(对象)。如果您遵守我上面给您的基本常识规则,您永远不会遇到如下攻击向量的问题:

SELECT * FROM tbl_user WHERE ='';DROP TABLE;

此外,MongoDB 仅支持每个命令 atm 一项操作(不使用eval,但永远不要这样做)这样无论如何都行不通......

我应该补充一点,这不适用于仅数据验证注入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的 NoSql 注入 的相关文章

随机推荐