gpt4 book ai didi

php - codeigniter 查询生成器和事件记录 sql 注入(inject)

转载 作者:行者123 更新时间:2023-11-29 02:46:58 26 4
gpt4 key购买 nike

自从我在 SO 中提出上一个问题以来,我一直在阅读一些有关如何防止 sql 注入(inject)的内容,许多人提到了事件记录类。但是当我用谷歌搜索时,它只存在于 codeigniter 2 中。

所以我的问题是:

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

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

附言我正在使用 codeigniter 3 和 mysql

最佳答案

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

关于php - codeigniter 查询生成器和事件记录 sql 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40802892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com