> Может ли в SQL-запросе быть инъекция и как ее предотвратить (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Т-Банк

Стек: Go

> Пример ответа

Да, SQL-инъекция возможна в Go, если вы конкатенируете строки для построения запроса. Например, опасный код:

GO
rows, err := db.Query("SELECT * FROM users WHERE name = '" + userName + "'")

Злоумышленник может передать userName как ' OR '1'='1, что приведет к выбору всех пользователей.

Чтобы предотвратить инъекцию, всегда используйте параметризованные запросы (плейсхолдеры). В Go с драйверами database/sql это делается через ? (для PostgreSQL - $1, $2 и т.д.):

GO
rows, err := db.Query("SELECT * FROM users WHERE name = ?", userName)

Параметры передаются отдельно, и драйвер экранирует их корректно. Также избегайте динамического построения SQL через fmt.Sprintf или конкатенацию. Для сложных случаев (например, динамические ORDER BY) используйте белые списки допустимых значений.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью