数据库CI的消毒

时间:2015-05-05 13:33:37

标签: php codeigniter

在CI中,您有验证规则,活动记录和输入;库/助手为您清理数据。

当您通过帖子接收数据时,您需要做的就是$ this-> input-> post('id',TRUE);你可以确定'id'是安全的。

验证规则具有相同的功能,可帮助您检查字符串是否为xss clean,但也可以帮助您验证有益的信息。

同时,如果要进入DB的数据,活动记录会转义您推入数据库的每个变量信息,以防止mysql注入。

问题是,他们在'id'元素上使用form validate的原因是什么,用于在页面上显示有关产品的信息?

我怎么看,因为DB转义字符串,将'id'直接推入DB并在控制器中有一个if语句来验证是否在DB中找到任何数据是安全的。所以我感兴趣的是确认下面的内容是否有效或可能还有一些其他想法。

我之所以提出这个问题的原因是因为我记得读过显然CI没有足够的消毒处理,而且主动记录不可信任吗?因此,我不相信自己以这种方式执行CRUD操作。

这是一个例子

控制器:

public function view(){
   $result = $this->product_model->getById($this->input->post('id'));

   if($result == FALSE){ redirect('previous page'); }

   $this->load->view('work/proof_read/view', array('product' => $result));
}

模型

public function getById($product_id){
   $this->db->select('*');
   $this->db->from('products');
   $this->db->where('id', $product_id);

   $query = $this->db->get();
   if ($query->num_rows() > 0) {
      return $query->result_array();
   }

   return FALSE; 
}

1 个答案:

答案 0 :(得分:1)

CodeIgniter中的表单验证仅验证来自表单的数据,例如字符串,电子邮件,电话号码等。数据库部分无需验证任何内容。它只会转义引号并使其安全(松散地)插入数据库。

我松散地说。你的数据库引擎有最终决定权。如果您尝试插入纯数字字段,它将无法接受CodeIgniter表单库验证的字符串。

在您的控制器示例中,您需要检查您的$ this-> input->帖子(' id')是否为数字,或者至少它是否存在为您的ID数据库中。