codeigniter使用Active Record Class进行sql注入转义

时间:2012-06-24 03:09:24

标签: php mysql codeigniter insert escaping

根据我的理解,使用$ this-> db-> insert()转义值:

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

Note: All values are escaped automatically producing safer queries.

但是当我查看mysql时,我的输入没有被转义,是否由于某种原因删除了一些如何?

在这里担心sql注入,这就是我要问的原因。

2 个答案:

答案 0 :(得分: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注入的安全措施。

答案 1 :(得分:0)

BY“逃脱”意味着取代它:

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

另外,请检查: