Найдите ошибку в коде и уязвимость (код с SQL-конкатенацией через QueryBuilder)

Ошибка в коде с SQL-конкатенацией через QueryBuilder обычно связана с тем, что разработчик вручную конкатенирует строки SQL-запроса, что приводит к уязвимости — SQL-инъекции.

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

Пример уязвимого кода:

$query = $queryBuilder->select('*')
    ->from('users')
    ->where("username = '" . $_GET['username'] . "'");

Здесь параметр $_GET['username'] вставляется напрямую, что позволяет злоумышленнику внедрить SQL-код.

Правильный подход — использовать привязку параметров:

$query = $queryBuilder->select('*')
    ->from('users')
    ->where('username = :username')
    ->setParameter('username', $_GET['username']);

Таким образом, ошибка — ручная конкатенация параметров в запросе, уязвимость — возможность SQL-инъекции.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее