> Как защититься от 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-кода.
> Похожие задачи по backend
Являются ли мапы в Go потокобезопасными
Как сделать так, чтобы изменения слайса в функции были видны в вызывающей функции
Какое взаимодействие между сервисами предпочтительнее: синхронное или асинхронное
Где используется recover в Go?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью