首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的NoSql注入

Python中的NoSql注入
EN

Stack Overflow用户
提问于 2012-10-27 10:26:19
回答 2查看 7.3K关注 0票数 4

在尝试提出这个问题时,我得到了this one --它使用的是Java,在回答中给出了一个Ruby示例,并且似乎只有在使用Json时才会进行注入?因为我有一个公开,我将尝试比较NoSQL和SQL,我试着说:快乐,nosql没有sql注入,因为它不是sql .

请你解释一下:

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-27 13:54:40

在MongoDB中有几个关于注入的问题:

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

正如@Burhan所说,注射来自无消毒的输入。幸运的是,对于MongoDB,它有面向对象的查询。

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

代码语言:javascript
复制
SELECT * FROM tbl_user WHERE ='';DROP TABLE;

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

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

票数 9
EN

Stack Overflow用户

发布于 2012-10-27 10:30:05

SQL注入与数据库无关。这是一种允许执行任意SQL命令的漏洞,因为目标系统没有清理提供给SQL服务器的SQL。

无论你是否在NoSQL上,都不重要。如果您在mongodb上运行了一个系统(或者couchdb,或者XYZ ),并且您提供了一个前端,用户可以在这里输入记录-而且您不能正确地转义和清理来自前端的输入;您可以接受SQL注入。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13099301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档