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.
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
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.