注射的NoSql在Python(NoSql Injection in Python)

2019-08-02 00:48发布

试图让这个问题的时候,我得到了这一个是使用Java,并在回答它给了一个Ruby的例子,它似乎是注射使用JSON时只发生? 因为我一个暴露在那里我会尽力的NoSQL和SQL之间的比较,我试图说: 幸福的NoSQL没有SQL注入,因为它不是SQL ...

你可以请给我解释一下:

  • 注射了SQL使用Python驱动程序(pymongo)时发生。
  • 如何避免它。
  • 使用使用登录表单中注释的老办法sql注入的比较。

Answer 1:

有一对夫妇与注射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;

此外MongoDB中仅支持每个命令ATM一个操作(不使用eval ,永远不要做,虽然),这样,才不会反正工作...

我想补充一点,这并不适用于数据验证仅注射。



Answer 2:

SQL注入无关,与数据库。 它是一种类型的安全漏洞,允许任意的SQL命令的执行,因为目标系统不消毒即是考虑到SQL服务器的SQL。

如果您对NoSQL的与否没关系。 如果您对MongoDB的(或CouchDB的,或XYZ DB)运行的系统,并提供你的前端,用户可以输入记录 - 你没有正确逃生和净化输入从前端来; 你是开放的SQL注入。



文章来源: NoSql Injection in Python