Laravel естественным образом предотвращает внедрение SQL при использовании необработанного SQL? - PullRequest
0 голосов
/ 15 мая 2018

Я знаю, что все используют DB::raw() для выполнения необработанного sql.

Я сам вместо этого использую следующее:

DB::select("query string?", [$var]);
DB::insert("query string?", [$var]);
DB::update("query string?", [$var]);
DB::delete("query string?", [$var]);

обеспечивает ли Laravel защиту от SQL-инъекций или я все ещенужно экранировать мои переменные?

1 Ответ

0 голосов
/ 15 мая 2018

Да, laravel обеспечивает защиту от SQL-инъекций.

Это связано с тем, что, поскольку построитель запросов использует PDO в фоновом режиме, мы знаем, что есть способ привязать параметры к нашему запросу, чтобы он очистил связанные переменные.

Теперь, как вы видели, произвольные (необработанные) запросы выполняются в конструкторе запросов с использованием, например, метода DB::select().Давайте посмотрим на метод select() в Illuminate\Database\Connection, чтобы увидеть, есть ли у него какой-либо способ связать наши параметры.Давайте углубимся в это:

      public function select($query, $bindings = [], $useReadPdo = true)
{
    return $this->run($query, $bindings, function ($query, $bindings) use ($useReadPdo) {
        if ($this->pretending()) {
            return [];
        }

        // For select statements, we'll simply execute the query and return an array
        // of the database result set. Each element in the array will be a single
        // row from the database table, and will either be an array or objects.
        $statement = $this->prepared($this->getPdoForSelect($useReadPdo)
                          ->prepare($query));

        $this->bindValues($statement, $this->prepareBindings($bindings));

        $statement->execute();

        return $statement->fetchAll();
    });
}

И ваш запрос может выглядеть так:

    $someVariable = Input::get("some_variable");
    DB::select("SELECT * FROM some_table WHERE some_col = :somevariable", array(
       'somevariable' => $someVariable,
     ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...