mongodb - Python 中的 NoSql 注入(inject)

标签 mongodb sql-injection nosql

在尝试提出这个问题时,我得到了 this one它使用的是Java,并且在答案中给出了一个Ruby示例,似乎只有在使用Json时才会发生注入(inject)?因为我有一个 expose,我将尝试在 NoSQL 和 SQL 之间进行比较,我想说:开心一点,nosql 没有 sql 注入(inject),因为它不是 sql ...

你能解释一下吗:

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

最佳答案

MongoDB 中的注入(inject)有几个问题:

  • $where JS 注入(inject) - 从用户输入构建 JavaScript 函数可能导致查询的行为与您预期的不同。 JavaScript 函数通常不是对 MongoDB 查询进行编程的可靠方法,强烈建议除非绝对需要,否则不要使用它们。
  • 运算符注入(inject) - 如果您允许用户(从前端)构建 $or 或其他内容,他们可以轻松操纵此功能来更改您的查询。如果您只是从一组文本字段中获取数据并根据该数据手动构建 $or,这当然不适用。
  • JSON 注入(inject)——最近有相当多的人一直在尝试将从某些客户端源发送的完整 JSON 文档(具有讽刺意味的是,这首先是在 JAVA 中看到的)转换为文档以插入到 MongoDB 中。我什至不需要深入探讨为什么这很糟糕。字段的 JSON 值很好,因为 MongoDB 当然是 BSON。

正如@Burhan 所述,注入(inject)来自未经净化的输入。幸运的是,对于 MongoDB,它具有面向对象的查询。

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

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

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

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

关于mongodb - Python 中的 NoSql 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13099301/

相关文章:

amazon-web-services - 数据库中的用户提要(可能是 DynamoDb)

nosql - Cassandra 数据建模 - 具有日期时间的动态列和 UTF8Type 过滤

javascript - Meteor 和 ReactJS - 从 MongoDB 检索日期到字符串?

mongodb - MongoDB 的简单 HTTP/TCP 健康检查

java - Java中的SQL注入(inject)攻击

php - 验证数据库匹配中的 $_GET id 是否足够安全?

node.js - 如何在包含日期类型对象的mongodb数据库中设置空或无数据

javascript - Mongoose 类型错误 : object is not a function when instantiating object of a schema type

mysql - Node.js mysql 包中的转义函数是否足以安全地查询 mysql 数据库(不使用准备好的语句)?

Cassandra 数据建模 : Use a Map or have a lot of empty columns?