SQL Injection Detection
Overview
SQL injection occurs when user-controlled input is incorporated into SQL queries without proper sanitization or parameterization.
Detection Strategy
- Import check: Look for database packages (database/sql, gorm, sqlx)
- Call check: Find SQL execution functions (Query, Exec, Raw)
- Context check: Check if arguments include string concatenation or fmt.Sprintf
- Taint check: Trace if user input reaches SQL execution sinks
Remediation
Use parameterized queries / prepared statements instead of string concatenation.
Vulnerable:
db.Query("SELECT * FROM users WHERE id = " + userInput)
Safe:
db.Query("SELECT * FROM users WHERE id = $1", userInput)