我是FuelPHP框架的新手。现在我正在为一个地点列表实施“自动填充”。
我的代码如下所示:
public function action_search($term=null){
$clean_query = Security::clean($term);
$data["locations"] = array();
if ($clean_query != "") {
$data["locations"] = Model_Orm_Location::query()
->where("title", "like", $clean_query."%")
->get();
}
$response = Response::forge(View::forge("location/search", $data));
$response->set_header("Content-Type","application/json");
return $response;
}
正如你所看到的,我正在联系LIKE
声明,这对我来说有点不好。这段代码对SQL注入是否安全?如果是,那是因为:
Security::clean
将删除所有混乱; where()
将进行过滤吗?答案 0 :(得分:3)
查看implementation of Security::clean
in the source code of core/class/security.php,在您的情况下,应用的过滤器取决于configuration security.input_filter, which is empty by default。所以没有应用过滤器。
但是当你深入研究数据库抽象时,你会看到,在执行之前查询是compiled时,中提供的query builder will apply quote
on the value 条件,which will then apply escape
on string values。该escape
方法的实现取决于DBMS连接:
这反映了今天的最佳做法。所以,是的,这对SQL注入是安全的。