【问题标题】:Prevent Sql Injection In Laravel Full text search在 Laravel 全文搜索中防止 Sql 注入
【发布时间】:2020-04-16 10:02:14
【问题描述】:
if(!empty($request->search_key)){
                $search = $request->search_key;
                $search_keys = explode(' ', $search);
                $count = 1;
                if(count($search_keys) > 0){
                    foreach($search_keys as $keys){
                        if(trim($keys) != ''){
                            $relevance .= " (MATCH(column_name) AGAINST ( ". "'" . $keys . "'" . ")* " . $count*10 . ") +";
                        }
                        $count++;
                    }
                }
                else{
                    $relevance .= " (MATCH(column_name) AGAINST ( ". "'" . $search . "'" . ")* " . $count*10 . ")";
                }
                $relevance = rtrim($relevance, '+');
                $relevance = $relevance . ' AS relevance';

               DB::table('tbl')->select(DB::raw($relevance))->get();
            }

在这段代码中我们如何防止sql注入,如果它是一条语句,那么我认为我可以使用,

DB::raw("SELECT * FROM users WHERE name = ?", [$name]));

但在这种情况下,我会循环准备它。那么如何解决呢?

谢谢。

【问题讨论】:

    标签: laravel sql-injection laravel-6


    【解决方案1】:
    $search_keys = explode(' ', $search);
    $terms = [];
    $params = [];
    $count = 1;
    foreach ($search_keys as $key) {
        $terms[] = "(MATCH(column_name) AGAINST(?) * ?)";
        $params[] = $key;
        $params[] = $count * 10;
        $count++;
    }
    $relevance = implode($terms, " + ") . " AS relevance";
    

    现在您有了一个查询参数数组,可以在执行时使用:

    DB::table('tbl')->selectRaw($relevance, $params)->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多