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.