2016-11-25 154 views
2

因为我在SO最后一个问题,我一直在阅读一些关于如何防止sql注入和许多人提到活动记录类。但是当我谷歌,它只有在笨2.codeigniter查询生成器和活动记录sql注入

存在,所以我的问题是:

  1. 是查询生成器类CI中3活动记录类的升级版或他们的目的不同?

  2. 是否足够(一般情况下)使用查询生成器类方法(如$this->where('field', $foo);而不是$this->where("field = '$foo'");)来防止sql注入?

P.S.我正在使用codeigniter 3和mysql

+1

在看看:http://stackoverflow.com/questions/1615792/does-codeigniter-automatically-prevent-sql-injection –

+0

是我在问之前已经读过这个问题。这个问题在这里没有回答我的任何问题。那里有太多不同的意见来总结任何事情。 – dapidmini

回答

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的情况下运行你的查询,你必须手动转义你的参数。你可以笨文档中获得更多的信息:

https://www.codeigniter.com/userguide3/database/queries.html#escaping-queries