Laravel построитель запросов: эта команда освобождена от SQL инъекций? - PullRequest
0 голосов
/ 09 января 2020

Когда-то go я прочитал здесь, на Stackoverflow, принятый ответ, в котором утверждалось, что select("sql query") освобожден от SQL инъекции, а select(raw("sql query")) - нет. В моем случае у меня есть следующий код:

$request; // Illuminate\Http\Request

DB::connection('default')->select("
    SELECT *
    FROM `some_table`
    WHERE `some_col` = '$request->some_val'
");

Эта команда освобождается от SQL инъекции? Если да, я не могу понять, как построитель запросов знает, как подготовить оператор? : Мышление:

Ответы [ 3 ]

2 голосов
/ 09 января 2020

Для не разрешенных sql инъекций Вы должны использовать этот код

DB::::connection('default')
    ->select('SELECT * FROM `some_table` WHERE `some_col` = ?', [$request->some_val]);
2 голосов
/ 09 января 2020

Вы должны использовать:

DB::connection('default')->select("
    SELECT *
    FROM `some_table`
    WHERE `some_col` = ?
", [$request->some_val]);

, чтобы избежать SQL инъекции.

Вы можете прочитать:

Привязка параметров обеспечивает защиту от SQL инъекция.

на странице документации .

Если вы выполняете SQL запросов, как показано в вашем вопросе, вы можете пострадать от SQL инъекции.

0 голосов
/ 09 января 2020

Построитель запросов Laravel использует привязку параметров PDO для защиты вашего приложения от атак SQL внедрения. Нет необходимости очищать строки, передаваемые как привязки.

Вы можете обратиться к ссылкам ниже:

Laravel Красноречиво: SQL предотвращение инъекций выполняется автоматически? https://laravel.com/docs/5.6/queries#introduction

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...