这里是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
}
答案 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."'");
你可能知道。
这里主要关注的是;
答案 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
}