0

(SO のおかげで) mysql_* 関数ファミリは SQL インジェクションに対して脆弱であると聞いたので、常にmysqli_* OR PDO アプローチを使用することをお勧めします。

そこで、CI を 4 か月間使用しているので、これらのアプローチのどれが Codeigniter で使用されているかを追跡しようとしました。しかし、私はそれを得ることができませんでした。

CIで使用されているこれらのアプローチまたは他のアプローチのどれを教えてもらえますか?

前もって感謝します。

4

1 に答える 1

7

CodeIgniter は、config/database.phpファイルに基づいて、選択した方法を使用します。たとえば、mysqliドライバーとして選択すると、mysqli一連の関数が使用されます。を選択すると、ファミリmysqlが使用されます。mysql

PDO ドライバーはありますが、現在のリリースでは世界で最も安定したものではありません。

CodeIgniter で「アクティブ レコード」関数 (アクティブ レコード パターンに従っていないため、実際には「クエリ ビルダー」関数と呼ぶ必要があります) を使用している場合、すべてのデータは適切な関数で自動的にサニタイズされます。たとえば、ドライバー$this->db->where('field', $value)を使用している場合、CodeIgniter は渡された入力をmysqli自動的に呼び出し、クエリを安全にレンダリングします。mysqli_real_escape_string$value

また、この自動サニタイズはアクティブ レコード ヘルパー関数などにのみ適用されることにも注意してください$this->db->get。を使用して独自のクエリを実行しようとする場合$this->db->query("SELECT * FROM table WHERE field = '" . $field . "'")は、CodeIgniter のセキュリティ メカニズムをバイパスしているため、自分自身を保護するように注意する必要があります。メソッドを使用して直接クエリを実行することquery()は、「心配しないでください。自分が何をしているかはわかっています」と言っているようなものです。$this->db->escape()または関連する関数を呼び出して特定の値をサニタイズするように CodeIgniter に具体的に依頼する必要があります。変数をクエリに連結するだけでは、SQL インジェクションにさらされることになります。

于 2013-01-25T04:48:37.103 に答える