刚刚在堆栈溢出时阅读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注入? 如果有可能损害我的系统,你能给出一个特定的例子,如果它存在,我该如何防止。
答案 0 :(得分:8)
CodeIgniter已为您的案例提供了2种安全功能。
您的用户输入的XSS过滤: Input Class为其方法提供了第二个布尔参数,允许您通过XSS过滤器运行输入,以防您没有使用全局xss过滤器。
对于SQL注入,使用绑定查询和活动记录是安全的,它将使您免于SQL注入,因为框架会完成所有逃避易受攻击的用户输入的工作。用户报告的Active记录漏洞很少,但在CodeIgnitor团队(EllisLabs)的后续版本中很快就会被修复
答案 1 :(得分:1)
使用活动记录而不是运行直接SQL查询时,CodeIgniter会删除引号和易受攻击的脚本。所以没有使用Active记录的理由......
mysql_real_escape_string
并且在生成要运行的SQL查询时在内部完成一些检查。