Codeigniter - 活动记录是否容易受到SQL注入?

时间:2012-09-19 07:10:36

标签: mysql codeigniter activerecord sql-injection

刚刚在堆栈溢出时阅读this,因此让我想知道是否可以通过CI中的活动记录进行SQL注入。

在我项目的大多数地方,对于用户注册和用户配置文件更新,我已经完成了这样的SQL插入:

控制器:

$name = $this->input->post('name');
$last_name = $this->input->post('last_name');
$age = $this->input->post('dob');

$user_data = array(
    'name' => $name,
    'last_name' => $last_name,
    'age' => $age
);

$this->user_model->add_user_function($user_data);

型号:

function add_user_function($data)
{
    $this->db->insert('user_table',$data);
    return;
}

就像上面SO链接中的示例一样,我的代码是否可以用于SQL注入? 如果有可能损害我的系统,你能给出一个特定的例子,如果它存在,我该如何防止。

2 个答案:

答案 0 :(得分:8)

CodeIgniter已为您的案例提供了2种安全功能。

  1. 您的用户输入的XSS过滤: Input Class为其方法提供了第二个布尔参数,允许您通过XSS过滤器运行输入,以防您没有使用全局xss过滤器。

  2. 对于SQL注入,使用绑定查询和活动记录是安全的,它将使您免于SQL注入,因为框架会完成所有逃避易受攻击的用户输入的工作。用户报告的Active记录漏洞很少,但在CodeIgnitor团队(EllisLabs)的后续版本中很快就会被修复

答案 1 :(得分:1)

使用活动记录而不是运行直接SQL查询时,CodeIgniter会删除引号和易受攻击的脚本。所以没有使用Active记录的理由......

mysql_real_escape_string并且在生成要运行的SQL查询时在内部完成一些检查。