PHP 和 HTML 中的 MongoDB 注入

Posted

技术标签:

【中文标题】PHP 和 HTML 中的 MongoDB 注入【英文标题】:MongoDB injection in PHP and HTML 【发布时间】:2014-02-24 05:51:03 【问题描述】:

我正在考虑将 MongoDB 与 CodeIgniter 一起使用,但我关心的是如何将数据插入到数据库中,大多数示例将 post 值直接放入集合中,这是一个梦想,因为它删除了提取步骤……但是用户可以轻松地向数据库中注入/覆盖值,与在数据库中映射一对一字段的 SQL 相比,似乎没有示例说明如何避免这种类型的数据注入......

我可能会看到两个问题,即注入的附加值和包含不正确数据类型的字段,即:包含数组或对象的名称。

解决方案是构建模型类以将我的 POST 数据与数据类型一起映射,还是有更简单的方法?

示例: MongoDB and CodeIgniter

【问题讨论】:

【参考方案1】:

环顾四周,我想唯一的解决方案是将其映射到本地数组或模型类中。 示例来自:http://www.php.net/manual/en/mongo.tutorial.php 会更像:

$post = $this->input->post();
$document = array( "title" => (string)$post['title'], "online" => (bool)$post['online']);
$collection->insert($document);

大家怎么看?

【讨论】:

将值转换为预期类型是一种很好的方法。当使用Doctrine ODM 之类的东西时,模型类和属性将映射到 MongoDB 的类型,但在 setter 方法中进行强制转换仍然是最佳实践。使用 ODM 的额外好处是处理相关文档(嵌入的或引用的),但如果您的文档大多是扁平的,那么上面的示例很简单,并且放弃了 ODM 的开销。【参考方案2】:

CodeIgniter 具有完整的活动记录功能,可帮助您处理数据的验证和清理:http://ellislab.com/codeigniter/user-guide/database/active_record.html

但是你也可以使用类似 Doctrine 2: http://docs.doctrine-project.org/en/2.0.x/cookbook/integrating-with-codeigniter.html 的东西来解决这个问题,它有一个完全适合的 MongoDB 版本的 itelf。

【讨论】:

是的,但两个库都不知道预期的数据结构。 @on_ 它出现在 CodeIgniter 中,它们只有表单验证:ellislab.com/codeigniter%20/user-guide/libraries/… 但它是同一回事,您可以为每个表单制作一个模型并在那里验证它 我知道 form_validation - 无论如何都会使用它......但是它没有做的是适应通过 post 注入的数据类型和其他字段。 @on_ CI 不会根据表单验证来限制数据类型和字段吗? 只有十进制和数字检查,因为 SQL 数据库会丢弃错误的数据类型,现在使用 NoSQL 一些数据将是数组或对象,我们希望确保它是该数据类型...如您所见,我们正在努力转向这种文档类型的思考

以上是关于PHP 和 HTML 中的 MongoDB 注入的主要内容,如果未能解决你的问题,请参考以下文章

NOSQL MongoDB 注入——本质上还是和sql注入是类似的

thinkphp5学习总结9-数据流,以及php类的相关术语,请求的属性注入和方法注入

MongoDB 中的 JavaScript NoSQL 注入预防

请问PHP怎么过滤GET或者POST的参数?防止js注入,或者一些html注入?请请提供代码参考?谢谢!

zabbix-latest.php-SQL注入漏洞(CVE-2016-10134)

PHP mysql_real_escape_string() 函数防SQL注入