Control de inyección de ensamblaje C #
-
03-07-2019 - |
Pregunta
Estoy creando un ensamblaje en C # para MS SQL 2005. Este ensamblaje crea un procedimiento almacenado y ejecuta una consulta dinámica basada en los parámetros pasados ??al procedimiento almacenado.
¿Existe una función simple en C # para evitar la inyección de SQL?
Por ejemplo
string myQuery = "SELECT * FROM dbo.MyTable WHERE lastName = '" + injectionCheck(arg1) + "'";
Esta pregunta fue respondida para la consulta estándar ... pero en situaciones en las que no hay forma de crear una consulta verdaderamente dinámica, ¿qué puedo usar en C # para la comprobación de inyecciones?
Por ejemplo, probablemente no funcionen:
utilizando @dbName;
SELECT * FROM @table
TECLA SIMÉTRICA ABIERTA @keyName
etc
Solución
Utilizar parámetros enlazados:
SqlCommand cmd = new SqlCommand(myQuery, conn);
cmd.Parameters.Add("@lastname", SqlDbType.NVarChar, 10, lastName);
Otros consejos
Utilizar parámetros ....
(Esto ya se ha publicado a menudo)
string myQuery = "SELECT * FROM myTable WHERE lastname = @p_name";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = myQuery;
cmd.Parameters.Add ("@p_name", SqlDbType.Varchar).Value = "melp";