在FuelPHP中清理用户输入

时间:2012-11-12 18:14:00

标签: security sql-injection fuelphp

我是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将删除所有混乱;
  • ORM查询中的
  • where()将进行过滤吗?

1 个答案:

答案 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注入是安全的。