Laravel Eloquent: предотвращается ли инъекция SQL автоматически? - PullRequest
0 голосов
/ 01 июля 2018

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

1 Ответ

0 голосов
/ 01 июля 2018

Да, но ...

Да, это предотвращает SQL-инъекцию , когда вы полагаетесь на встроенную функциональность ORM, например $someModelInstance->save(). От документы :

Конструктор запросов к базе данных Laravel предоставляет удобный и удобный интерфейс для создания и выполнения запросов к базе данных. Он может использоваться для выполнения большинства операций с базами данных в вашем приложении и работает во всех поддерживаемых системах баз данных.

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

Обратите внимание, что вы не автоматически защищены, если вы строите необработанные операторы SQL и выполняете их или используете необработанные выражения. Больше из документов :

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

При построении необработанных операторов или выражений SQL всегда следует использовать параметризованные запросы. См. Последнюю ссылку выше (и другие части документов, а также) для получения информации о том, как это сделать в Laravel / Eloquent.

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