在尝试提出这个问题时,我得到了 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/