4

$ this-db-> query()にはmysqlインジェクション保護がありますか?私はこれをインスタンスで使用し、SQLインジェクションから保護するために何もしていないので疑問に思いました。

4

3 に答える 3

5

CodeIgniterを使用したActiveRecordスタイルのクエリはパラメーターをエスケープしますが、query()はエスケープしません。

この方法でアクティブレコードを使用できます。

$someAge = 25;
$this->db->select('names, age');
$query = $this->db->get_where('people', array('age' => '>' . $someAge));

詳細については、https ://www.codeigniter.com/userguide2/database/active_record.htmlをご覧ください。

于 2012-10-13T20:51:59.760 に答える
5

いいえ、db-> query()はデフォルトでSQLインジェクションで保護されていません。いくつかのオプションがあります。クエリバインディングを使用する

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 
$this->db->query($sql, array(3, 'live', 'Rick'));

続行しながらクエリを作成する必要があるより複雑なクエリの場合は、compile_bind()を使用してSQLのチャンクを取得します。

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 
$safe_sql  = $this->db->compile_bind($sql, array(3, 'live', 'Rick'));

または、パラメータでescape $ this-> db-> escape()を使用します

$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";

最初にフォーム検証を使用し、xss_clear、max_lengthなどを上記のいずれかと組み合わせて含めることが常にベストプラクティスです。

于 2012-10-13T21:30:35.897 に答える
0

クエリバインディングを使用できます。

CI 3ユーザーガイドの例:

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
于 2020-08-25T02:12:18.353 に答える