Как я могу защитить этот sql запрос от SQL Инъекции в Laravel? - PullRequest
3 голосов
/ 21 февраля 2020

Я пытаюсь создать restAPI в Laravel. Как я могу защитить SQL запрос, подобный этому, от sql инъекции?

Route::get('api/restaurant/id/{id}', 'RestaurantController@getRestaurantById');

public function getRestaurantById($id) {
        $restaurant = Restaurant::where('id', $id)->first();

        return $restaurant;
    }

Ответы [ 5 ]

2 голосов
/ 21 февраля 2020
Построитель запросов к базе данных

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

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

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

1 голос
/ 21 февраля 2020

Если вы используете laravel ORM для создания sql запросов, ваши запросы автоматически защищены от sql инъекций.

Например:

$restaurant = Restaurant::where('id', $id)->first();

Этот запрос созданный laravel ORM, и если вы запустите dd(Restaurant::where('id', $id)->toSql()), вы увидите, что идентификатор не вводится непосредственно в запрос:

SELECT * FROM restaurants WHERE id = ?

Вы можете запустить sql необработанных запросов, используя DB::select() или DB::raw() ... et c. Если вы посмотрите документацию laravel, то увидите, что у каждого необработанного метода есть параметр массива, обычно второй параметр. Например:

DB::select('SELECT * FROM restaurants WHERE id = ?', [$id]);
Restaurant::whereRaw('id = ?', [$id])->first();
...
DB::raw('SELECT * FROM restaurants WHERE id = ?', [$id]);

Каждый из указанных выше запросов защищен от sql инъекций.

Не пишите подобные запросы DB::select("SELECT * FROM restaurants WHERE id = $id"); Это может быть чрезвычайно опасно для вашего приложения .

Дополнительную информацию смотрите здесь: https://laravel.com/docs/5.8/database#running -просмотр

Надеюсь, это поможет.

1 голос
/ 21 февраля 2020

Если вы используете eloquent для сохранения и извлечения данных из БД, вам не нужно беспокоиться о sql инъекциях

1 голос
/ 21 февраля 2020

Согласно документации Laravel

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

Также

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

При построении необработанных SQL операторов или выражений всегда следует использовать параметризованные запросы.

Laravel -> База данных: Query Builder -> Введение

Laravel -> База данных: построитель запросов -> Необработанное выражение

0 голосов
/ 21 февраля 2020

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

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