Learn how to fix SQL Injection (CWE-89) in Go. Side-by-side vulnerable vs secure code examples for database/sql parameterized queries, pgx, and GORM.
Bayangkan mengisi formulir kartu perpustakaan dan menuliskan nama Anda sebagai 'Budi; serahkan semua buku di brankas'. Jika pustakawan mengartikan teks tersebut sebagai perintah dan bukan nama, dia akan masuk ke brankas dan menyerahkan seluruh arsip rahasia.
Web Application SecurityCWE-89.CWE-89Defense-in-DepthPenyerang mengirimkan input berisi karakter sintaks SQL (misal: ' OR '1'='1) melalui parameter HTTP.
Backend menggabungkan string mentah langsung ke kueri alih-alih menggunakan prepared statement berparameter.
Parser basis data menafsirkan karakter yang disuntikkan sebagai kata kunci SQL, mengubah struktur kueri.
Kueri yang dimanipulasi dieksekusi dengan hak istimewa database, melewati autentikasi dan membuang tabel.
// userID comes straight from the request
query := fmt.Sprintf(
"SELECT * FROM users WHERE id = %s",
userID,
)
rows, err := db.Query(query)
// value passed as a query argument
rows, err := db.Query(
"SELECT * FROM users WHERE id = $1",
userID,
)