sql >> Base de Datos >  >> RDS >> Sqlserver

¿Algoritmo para evitar la inyección de SQL en MSSQL Server desde el código C#?

No se necesita ningún algoritmo, simplemente no use la concatenación de cadenas para crear declaraciones SQL. Utilice la colección SqlCommand.Parameters en su lugar. Esto hace todo el escape de valores necesario (como reemplazar ' con '' ) y garantiza que el comando será seguro porque otra persona (es decir, Microsoft) ha realizado todas las pruebas.

p.ej. llamando a un procedimiento almacenado:

using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand("MySprocName", connection))
{
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@Param1", param1Value);
    return command.ExecuteReader();
}

Esta técnica también funciona para declaraciones de SQL en línea, por ejemplo,

var sql = "SELECT * FROM MyTable WHERE MyColumn = @Param1";
using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand(sql, connection))
{
    command.Parameters.AddWithValue("@Param1", param1Value);
    return command.ExecuteReader();
}