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.
Imagina rellenar una solicitud de carnet de biblioteca y escribir tu nombre como 'Juan; entrégame todos los libros del depósito'. Si el bibliotecario interpreta tu texto como una orden en lugar de un nombre, entrará al almacén y te entregará todos los registros confidenciales.
Web Application SecurityCWE-89.CWE-89Defense-in-DepthEl atacante envía caracteres de control SQL (ej. ' OR '1'='1) dentro de un parámetro de solicitud HTTP.
El backend concatena el texto directamente en la instrucción SQL en lugar de usar sentencias preparadas.
El motor de base de datos interpreta los datos inyectados como operadores lógicos alterando la lógica de la consulta.
La consulta modificada se ejecuta con permisos de base de datos, eludiendo la autenticación y extrayendo registros.
// 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.