Разве что Laravel естественно предотвратить SQL-инъекции, когда, используя чистый SQL?

Разве что Laravel естественно предотвратить SQL-инъекции, когда, используя чистый SQL?

15.05.2018 11:17:42 Просмотров 49 Источник

Я знаю, что все используют 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-инъекций или мне все еще нужно избежать своих переменных?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/50345442/does-laravel-naturally-prevent-sql-injection-when-using-raw-sql#comment87706608_50345442
Не тогда, когда вы объединяете/интерполируете любую из ваших переменных в строку запроса. Если вы передаете их как параметры в массиве, то да - в этом и заключается смысл отделения строки запроса от списка параметров, в конце концов.

Ответы - Разве что Laravel естественно предотвратить SQL-инъекции, когда, используя чистый SQL? / Does Laravel naturally prevent SQL injection when using raw SQL?

Является ответом!
Fahadi Muhumuza

15.05.2018 11:59:13

Да 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,
     ));
https://stackoverflow.com/questions/50345442/does-laravel-naturally-prevent-sql-injection-when-using-raw-sql/50346139#comment87708210_50346139
Что, если я использую только вопросительный знак? спасибо кстати
https://stackoverflow.com/questions/50345442/does-laravel-naturally-prevent-sql-injection-when-using-raw-sql/50346139#comment87710836_50346139
Еще не так уверен в этом, но вы можете попробовать это, как будто у него есть все, что вам нужно. [ cubettech.com/blog/laravels-query-builder-and-eloquent-orm/] . И для любого другого запроса, пожалуйста, УР добро пожаловать, чтобы спросить.
Закрыть X