NoSql Injection in Python



试图提出这个问题时,我得到了它使用的是Java,在答案中,它给出了一个Ruby示例,并且似乎只有在使用JSON时才会发生注射?因为我将在nosql和sql之间进行比较,我试图说:很高兴,nosql没有SQL注入,因为它不是SQL ...

您可以向我解释:

  • 使用Python驱动程序(Pymongo)时SQL注入如何发生。
  • 如何避免它。
  • 使用登录表中的评论使用旧方法SQL注入的旧方法进行比较。

在mongodb中有几个关注点:

  • $where JS注入 - 从用户输入中构建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;

也只支持每个命令atm的一个操作(不使用 eval,虽然永远不要这样做),所以无论如何都行不通...

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

SQL注入与数据库无关。这是一种允许执行任意SQL命令的漏洞,因为目标系统不会消毒给SQL Server的SQL。

您是否在NOSQL上都没关系。如果您在MongoDB(或CouchDB或XYZ DB)上运行的系统,并且提供了一个前端,则用户可以输入记录 - 并且您无法正确逃脱并消毒从前端传来的输入;您对SQL注入开放。

最新更新