flawopen.com/sql-injection/C-cpp
Learn how to fix SQL Injection (CWE-89) in C and C++. Side-by-side vulnerable vs secure code examples for sqlite3_prepare_v2 and libpq PQexecParams binding.
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.
/* user_id from network input */
char query[256];
sprintf(query,
"SELECT * FROM users WHERE id = %s",
user_id);
sqlite3_exec(db, query, cb, 0, &errmsg);
/* value bound, never in the query text */
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db,
"SELECT * FROM users WHERE id = ?",
-1, &stmt, 0);
sqlite3_bind_text(stmt, 1, user_id,
-1, SQLITE_TRANSIENT);
sqlite3_step(stmt);