Учитывая пример кода (Сообщение - модель Eloquent.):
public function submit(Request $request){
$this->validate($request, [
'name' => "required",
"email" => "required"
]);
//database connection
$message = new Message;
$message->name = $request->input("name");
$message->email = $request->input("email");
$message->save();
}
Использует ли Eloquent параметризованные запросы (например, PDO) или какие-либо другие механизмы для предотвращения SQL-инъекции?






Да, но...
Да, он предотвращает SQL-инъекция, когда вы полагаетесь на встроенную функциональность ORM, такую как $someModelInstance->save(). От документы:
Laravel's database query builder provides a convenient, fluent interface to creating and running database queries. It can be used to perform most database operations in your application and works on all supported database systems.
The Laravel query builder uses PDO parameter binding to protect your application against SQL injection attacks. There is no need to clean strings being passed as bindings.
Обратите внимание, что нет автоматически защищен, если вы создаете необработанные операторы SQL и выполняете их или используете необработанные выражения. Больше из документации:
Raw statements will be injected into the query as strings, so you should be extremely careful to not create SQL injection vulnerabilities.
При построении необработанных операторов или выражений SQL всегда следует использовать параметризованные запросы. См. Последнюю ссылку выше (и другие части документации) для получения информации о том, как это сделать в Laravel / Eloquent.
Итак, я прочитал документацию, но все еще не уверен. Будете ли вы по-прежнему защищены от внедрения sql, если используете ->whereRaw('query with binding ?', [$variableFromUser])?
Да, если вы используете заполнитель ? и не связываете напрямую какие-либо значения. Защита от SQL-инъекций - это то, для чего нужен синтаксис заполнителя.
Да, это так. Прочтите здесь, я скопирую вставку: построитель запросов Laravel использует привязку параметров PDO для защиты вашего приложения от атак SQL-инъекций. Нет необходимости очищать строки, передаваемые как привязки.