Laravel Eloquent: предотвращение SQL-инъекций выполняется автоматически?

Учитывая пример кода (Сообщение - модель 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-инъекции?

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

matiaslauriti 01.07.2018 21:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
24
1
23 490
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, но...

Да, он предотвращает 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])?

Daniel 07.09.2020 11:28

Да, если вы используете заполнитель ? и не связываете напрямую какие-либо значения. Защита от SQL-инъекций - это то, для чего нужен синтаксис заполнителя.

elixenide 07.09.2020 14:26

Другие вопросы по теме