在codeigniter中,将URI段传递给您的函数是否安全?

时间:2012-04-24 16:16:20

标签: php codeigniter model controller uri

这里是URI:example.com/index.php/products/shoes/sandals/123,这里是相应的控制器:

<?php
class Products extends CI_Controller {

    public function shoes($sandals, $id)
    {
        $this->some_DB_using_Model->getListUsing($sandals,$id)
    }
}
?> 

$sandals直接发送到模型是否安全,或者我应该在发送之前应用过滤器。

编辑:

function getListUsing($p1,$p2){
     $this->db->start_cache();
     $this->db->select('a');
     $this->db->select('b');
     $this->db->select('c');
     $this->db->where('p1',$p1);
     $this->db->where('p2',$p2);
     //then return the result
}

4 个答案:

答案 0 :(得分:2)

这取决于模型的作用。如果你在数据库查询中使用它,那么,是的,你需要逃避它。

如果你正在使用CodeIgniter的活动查询,那么它将为你逃避。

答案 1 :(得分:1)

URI变量有一些限制,比如config.php文件中uri段中的允许字符,在核心中,有一个名为_filter_uri($ str)的函数可以清除uri中的恶意字符,如果你不允许的话您的uri中的引号或双引号,并使用CI数据库驱动程序进行SQL变量清理,这不会对您的系统造成任何问题。

例如;

$this->db->query("update table set a=? where b=?",array($a_value,$b_value));

比以下安全:

$this->db->query("update table set a='".$a_value."' where b='".$b_value."'");
你可能知道。

这里主要关注的是;

  1. 您想要向用户显示一些变量,
  2. SEO相关问题。

答案 2 :(得分:0)

叫我旧时尚,但我仍然想写出我的SQL语句。话虽如此,我使用Query Bindings,以便为我自动转义值。

答案 3 :(得分:-3)

我建议你使用sparks它会为你逃避所有的数据而记住你永远不会相信用户的输入/你也可以使用该功能来逃避每一段。即。

www.example.com/controllername/$item1/$item2

public function controllername ($item1,$item2)
{
  //sanitazi the data
   htmlentities($item1)
   htmlentities($item2)

//after this performed the call to your model by passing the new var or array 


}