> Как защититься от SQL-инъекций (Go)

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

Компании: InDrive, VK

Стек: Go

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

Основной способ защиты от SQL-инъекций в Go - использование параметризованных запросов (prepared statements) вместо конкатенации строк. Вместо того чтобы вставлять пользовательский ввод напрямую в SQL, используйте плейсхолдеры ($1, $2 для PostgreSQL, ? для MySQL) и передавайте значения отдельно.

Пример (пакет database/sql):

GO
// ОПАСНО: уязвимость к инъекциям
db.Exec("SELECT * FROM users WHERE name = '" + userName + "'")
// БЕЗОПАСНО: параметризованный запрос
db.Query("SELECT * FROM users WHERE name = $1", userName)

Дополнительные меры:

  • Используйте ORM (например, GORM, sqlx) - они автоматически параметризуют запросы.

  • Валидируйте и санируйте входные данные (тип, длина, формат), но не полагайтесь на это как на основную защиту.

  • Ограничьте права БД: приложение должно иметь только необходимые привилегии (например, только SELECT для чтения).

  • Для динамических частей запроса (например, сортировка по столбцу) используйте белый список допустимых значений, а не подстановку строк.

Параметризация - это стандарт безопасности, который предотвращает интерпретацию ввода как SQL-кода.

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

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