如何在codigniter中检查sql注入?

时间:2015-07-09 11:58:13

标签: php mysql codeigniter sql-injection

我正在开发codeigniter项目。我怎么知道我的模型中的查询函数阻止了sql注入。 即使我使用不同的方式插入数据,但我怎样才能确保哪一个是安全的。

这是我的代码:

1) *****************
    $data = array(
   'name' => $_POST['name'],
   'email' => $_POST['email'],
   'phone' => $_POST['phone'],
   'city' => $_POST['city'],
   'current_salary' => $_POST['current_salary'],
   'expected_salary' => $_POST['expected_salary'],
   'reume_link' => $file_name,
   'status' => 0,
   );
   $this->db->insert('my_table_name', $data);

2) **************************
    $query = $this->db->query('SELECT  distinct(name) as name   FROM `my_table_name` WHERE city like "%'.$_POST['state'].'%" ');
    $res = $query->result_array();

3) **************************    
    $query = $this->db->query("insert into my_table_name(nid,sid,cid,data) values('766','$sid',1,'".$_POST['adm_name']."')");
  

codeigniter函数是否阻止sql注入默认值,或者我严格需要使用prepare statement / bind参数。

     

简单的CI功能不安全吗?

5 个答案:

答案 0 :(得分:1)

以下是如何使用预准备语句的示例 -

replace

意味着您必须用实际数据替换?标记并以数组的形式将其作为第二个参数传递。

大多数ActiveRecord方法(例如$sql = 'SELECT distinct(name) name FROM `my_table_name` WHERE city like ?'; $query = $this->db->query($sql, array("%$_POST[state]%")); insert等)也是安全的,只要您遵循指南。

答案 1 :(得分:0)

您应该为查询中的每个变量使用$this->db->escape_str。另一种选择(即使是更好的选择)是使用预备语句。

答案 2 :(得分:0)

如果您使用CodeIgniter的Active Record方法,它会自动转义查询,以防止注入。

$this->db->select('*');
$this->db->from('table_name');
$this->db->where('column_name', $val1);
$this->db->get();

如果您不想使用CI Active Records,那么CI中就有$this->db->escape()的功能

$data1 = $this->db->escape($data1);
$this->db->query("SELECT * FROM table_name WHERE var = '$data1'");

或者您可以将查询绑定用作

$sql = 'SELECT * FROM table_name WHERE var = ?';
$this->db->query($sql, array($var));

即使不使用$_POST$_GET CI,其方法分别为$this->input->post()$this->input->get()

答案 3 :(得分:-1)

为了保护,请始终使用$this->input->post('name_of_input')$this->input->get('name_of_input')代替$_POST[] & $_GET[]

答案 4 :(得分:-1)

检查此link以获取文档

在config.php中设置

$config['global_xss_filtering'] = True;

或在验证中使用xss_clean,请查看link以获取文档