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

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

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,
));

