flawopen.com/sql-injection/Csharp
Learn how to fix SQL Injection (CWE-89) in C# / .NET. Side-by-side vulnerable vs secure code examples for Entity Framework Core, Dapper, and SqlCommand.Parameters.
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.
// userId comes straight from the request
var query =
$"SELECT * FROM Users WHERE Id = {userId}";
var cmd = new SqlCommand(query, connection);
var reader = cmd.ExecuteReader();
// value bound as a parameter
var cmd = new SqlCommand(
"SELECT * FROM Users WHERE Id = @id",
connection);
cmd.Parameters.AddWithValue("@id", userId);
var reader = cmd.ExecuteReader();
FromSqlInterpolated() over FromSqlRaw() in EF Core.