当试图提出这个问题时,我得到了这个问题,它正在使用 Java,并且在答案中它给出了一个 Ruby 示例,并且似乎注入仅在使用 Json 时发生?因为我有一个公开内容,我将尝试在 NoSQL 和 SQL 之间进行比较,我想说的是:开心,nosql 没有 sql 注入,因为它不是 sql ......
你能解释一下吗:
- 使用 Python 驱动程序 (pymongo) 时如何发生 sql 注入。
- 如何避免它。
- 使用登录表单中的注释使用旧方式 sql 注入的比较。
当试图提出这个问题时,我得到了这个问题,它正在使用 Java,并且在答案中它给出了一个 Ruby 示例,并且似乎注入仅在使用 Json 时发生?因为我有一个公开内容,我将尝试在 NoSQL 和 SQL 之间进行比较,我想说的是:开心,nosql 没有 sql 注入,因为它不是 sql ......
你能解释一下吗:
MongoDB 中的注入有几个问题:
$where
JS 注入 - 从用户输入构建 JavaScript 函数可能会导致查询的行为与您的预期不同。JavaScript 函数通常不是编写 MongoDB 查询的可靠方法,除非绝对需要,否则强烈建议不要使用它们。$or
或其他东西,他们可以轻松地操纵这种能力来更改您的查询。如果您只是从一组文本字段中获取数据并从该数据手动构建,这当然不适用$or
。正如@Burhan 所说,注入来自没有经过消毒的输入。幸运的是 MongoDB 它有面向对象的查询。
SQL注入的问题来自“SQL”这个词。SQL 是一种由字符串组成的查询语言。另一方面,MongoDB 实际上使用 BSON 文档来指定查询(对象)。如果您遵守我在上面给您的基本常识规则,那么您应该永远不会遇到以下攻击向量的问题:
SELECT * FROM tbl_user WHERE ='';DROP TABLE;
此外,MongoDB 仅支持每个命令 atm 一个操作(不使用eval
,但永远不要这样做),所以无论如何这都行不通......
我应该补充一点,这不适用于仅数据验证注入。
SQL注入与数据库无关。这是一种允许执行任意 SQL 命令的漏洞,因为目标系统不会清理提供给 SQL 服务器的 SQL。
是否使用 NoSQL 并不重要。如果您有一个在 mongodb(或 couchdb,或 XYZ db)上运行的系统,并且您提供了一个用户可以输入记录的前端——并且您没有正确地转义和清理来自前端的输入;您对 SQL 注入持开放态度。