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

¿Fue útil?

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";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top