🟡 Средний · 2 очк. Безопасность
Как в Go надежно защититься от SQL-инъекций при работе с базой данных?
A Экранировать кавычки в строках вручную
B Конкатенировать строки с запросом через + или fmt.Sprintf
C Использовать параметризованные запросы (плейсхолдеры)
D Заменять опасные символы регулярными выражениями
Объяснение вопроса

SQL-инъекция возможна, когда пользовательский ввод попадает в текст запроса как его часть. Злоумышленник может подставить фрагменты SQL и изменить логику запроса (чтение, изменение, удаление данных).

Защита - не подставлять ввод в строку запроса, а передавать его как параметры. Драйвер БД сам экранирует и привязывает значения к плейсхолдерам.

// Плохо - уязвимо к инъекции
query := "SELECT * FROM users WHERE login = '" + userInput + "'"

// Хорошо - параметризованный запрос
row := db.QueryRow("SELECT * FROM users WHERE login = $1", userInput)

В Go при работе с database/sql и любым драйвером нужно всегда использовать плейсхолдеры ($1, $2 для PostgreSQL или ? для MySQL) и передавать значения аргументами методов Query, Exec, QueryRow.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.