1

$ this-> db-> insert()を使用すると、値がエスケープされます。

http://codeigniter.com/user_guide/database/active_record.html#insert

Note: All values are escaped automatically producing safer queries.

しかし、mysqlを調べたところ、入力がエスケープされていません。何らかの理由で何らかの方法で削除されたのでしょうか。

ここでSQLインジェクションが心配なので、私は尋ねています。

4

2 に答える 2

2

SQLステートメントの文字列をエスケープする場合、後でデータを調べるときにバックスラッシュが追加されていることを必ずしも意味するわけではありません。これは、特定の文字がエスケープされ、SQLステートメントがエラーなしで実行されることを意味します。mysql_real_escape_stringでデータを挿入してみてください

LINE:557 https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Input.php

if ( ! is_php('5.4') && get_magic_quotes_gpc())
{
    $str = stripslashes($str);
}

その後

LINE:285 https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/drivers/mysql/mysql_driver.php

$str = is_resource($this->conn_id) ? mysql_real_escape_string($str, $this->conn_id) : addslashes($str);

文字列はmysql_real_escape_stringまたはaddslashesを介して渡されます。したがって、SQLインジェクションに対する安全対策が考慮されていると言えます。

于 2012-06-24T03:19:42.437 に答える
0

「エスケープ」とは、これを置き換えることを意味します。

SELECT * FROM table1 WHERE field1 LIKE "some string with " quotes"

このため:

SELECT * FROM table1 WHERE field1 LIKE "some string with \" quotes"

文字列を保存する前に文字列がエスケープされていることを確認する場合は、次の$this->db->escape*メソッドの使用を検討してください:http: //codeigniter.com/user_guide/database/queries.html

また、以下を確認してください。

于 2012-06-24T04:07:57.313 に答える