Python中的NoSql注入

Abd*_* Pp 4 sql-injection mongodb nosql

当试图提出这个问题时,我得到了一个它正在使用Java,并在答案中给出了一个Ruby示例,似乎注入仅在使用Json时才会发生?因为我有一个暴露,我将尝试在NoSQL和SQL之间进行比较,我试图说:开心,nosql没有sql注入,因为它不是sql ...

你能解释一下我:

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

Sam*_*aye 9

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;
Run Code Online (Sandbox Code Playgroud)

MongoDB也只支持每个命令atm一个操作(不使用eval,但不要这样做),所以无论如何都不会工作......

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