2016-11-25 93 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