codeigniter 查询生成器和活动记录 sql 注入
Posted
技术标签:
【中文标题】codeigniter 查询生成器和活动记录 sql 注入【英文标题】:codeigniter query builder and active record sql injection 【发布时间】:2017-04-09 17:32:37 【问题描述】:自从我在 SO 中提出最后一个问题以来,我一直在阅读一些关于如何防止 sql 注入的内容,并且许多人提到了活动记录类。但是当我谷歌它时,它只存在于codeigniter 2中。
所以我的问题是:
codeigniter 3 中的 Query Builder 类是 Active Record 类的升级版本,还是它们有不同的用途?
(通常)使用像$this->where('field', $foo);
这样的查询构建器类方法而不是$this->where("field = '$foo'");
来防止sql 注入是否足够?
附:我正在使用 codeigniter 3 和 mysql
【问题讨论】:
看看:***.com/questions/1615792/… 是的,我在提问之前已经阅读了这个问题。这个问题在这里没有回答我的任何一个问题。那里有太多不同的意见,无法得出任何结论。 【参考方案1】:1- ActiveRecord 在 Codeigniter 2 中,但在 Codeigniter 3 中,您使用的是 QueryBuilder。这两个类为你做同样的工作,也许 QueryBuilder 是 ActiveRecord 的改进版本。在 Yii2 等其他框架中,ActiveRecord 不仅是一个 ORM 查询字符串构建器,而且在 CI 中是一个简单的查询构建器。
2- Codeigniter 将自动转义所有传递的参数,但我建议您在运行查询之前验证您的输入。例如,数字 id 字段的值应该是数字,而不是字符串,因此 ID 输入的规则应该是 INTEGER。 您可以在官方文档中查看 Codeigniter 3 中的验证:https://www.codeigniter.com/userguide3/libraries/form_validation.html
您应该做的所有工作是将字段值作为函数参数传递,而不是作为字符串(字段和值一起)。如果要在没有 QueryBuilder 的情况下运行查询,则必须手动转义参数。您可以在 Codeigniter 文档中获得有关它的更多信息:
https://www.codeigniter.com/userguide3/database/queries.html#escaping-queries
【讨论】:
以上是关于codeigniter 查询生成器和活动记录 sql 注入的主要内容,如果未能解决你的问题,请参考以下文章
codeigniter 活动记录获取查询和不带 LIMIT 子句的查询
活动记录 CodeIgniter 2 中的这个查询有啥问题?