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 に答える