> Может ли в SQL-запросе быть инъекция и как ее предотвратить (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Т-Банк
Стек: Go
> Пример ответа
Да, SQL-инъекция возможна в Go, если вы конкатенируете строки для построения запроса. Например, опасный код:
GOrows, err := db.Query("SELECT * FROM users WHERE name = '" + userName + "'")
Злоумышленник может передать userName как ' OR '1'='1, что приведет к выбору всех пользователей.
Чтобы предотвратить инъекцию, всегда используйте параметризованные запросы (плейсхолдеры). В Go с драйверами database/sql это делается через ? (для PostgreSQL - $1, $2 и т.д.):
GOrows, err := db.Query("SELECT * FROM users WHERE name = ?", userName)
Параметры передаются отдельно, и драйвер экранирует их корректно. Также избегайте динамического построения SQL через fmt.Sprintf или конкатенацию. Для сложных случаев (например, динамические ORDER BY) используйте белые списки допустимых значений.
> Похожие задачи по Go
Зачем запускать много горутин на процессоре с ограниченным числом ядер
Какие приятные и неприятные моменты в работе программиста
Почему в канале Go без мьютекса не возникает проблем с конкурентным доступом?
Как определить дедлок в Go и когда он возникает?
> Похожие задачи по backend
Зачем запускать много горутин на процессоре с ограниченным числом ядер
Какие приятные и неприятные моменты в работе программиста
Почему в канале Go без мьютекса не возникает проблем с конкурентным доступом?
Как определить дедлок в Go и когда он возникает?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью