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.
Imaginez remplir un formulaire de carte de bibliothèque et écrire votre nom sous la forme 'Jean ; donnez-moi tous les livres du coffre'. Si le bibliothécaire interprète votre texte comme un ordre, il ouvre le coffre et vous remet tous les registres confidentiels.
Web Application SecurityCWE-89.CWE-89Defense-in-DepthL'attaquant transmet des caractères de syntaxe SQL (ex. ' OR '1'='1) dans un paramètre de requête HTTP.
Le serveur concatène directement la chaîne brute dans la requête SQL au lieu d'utiliser des requêtes préparées.
L'analyseur SQL interprète les caractères injectés comme des commandes et clauses logiques plutôt que de simples données.
La requête modifiée s'exécute avec les droits de la base de données, contournant l'authentification et exposant les tables.
/* 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);