2

我对 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()在 ORM 查询中会做过滤吗?
4

1 回答 1

3

查看core/class/security.php的源代码中的实现Security::clean,在您的情况下,应用的过滤器取决于配置security.input_filter,默认情况下为空。所以没有应用过滤器。

但是,当您深入研究数据库抽象时,您会看到,当查询在执行之前被编译时,查询构建器将应用于quotewhere条件中提供的值,然后将应用于escape字符串值。该escape方法的实现取决于 DBMS 连接:

这反映了当今的最佳实践。所以,是的,这对 SQL 注入是安全的。

于 2012-11-12T21:57:49.267 回答