【问题标题】:codeigniter query builder and active record sql injectioncodeigniter 查询生成器和活动记录 sql 注入
【发布时间】:2017-04-09 17:32:37
【问题描述】:

自从我在 SO 中提出最后一个问题以来,我一直在阅读一些关于如何防止 sql 注入的内容,并且许多人提到了活动记录类。但是当我谷歌它时,它只存在于codeigniter 2中。

所以我的问题是:

  1. codeigniter 3 中的 Query Builder 类是 Active Record 类的升级版本,还是它们有不同的用途?

  2. (通常)使用像$this->where('field', $foo); 这样的查询构建器类方法而不是$this->where("field = '$foo'"); 来防止sql 注入是否足够?

附:我正在使用 codeigniter 3 和 mysql

【问题讨论】:

  • 是的,我在提问之前已经阅读了这个问题。这个问题在这里没有回答我的任何一个问题。那里有太多不同的意见,无法得出任何结论。

标签: php mysql codeigniter security


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    相关资源
    最近更新 更多