Pregunta

Tengo una situación en la que necesito usar el método ExecuteCommand de LINQ para ejecutar una inserción.

Algo parecido (simplificado para los propósitos de esta pregunta):

object[] oParams = { Guid.NewGuid(), rec.WebMethodID };

TransLogDataContext.ExecuteCommand (
"INSERT INTO dbo.Transaction_Log (ID, WebMethodID) VALUES ({0}, {1})",
oParams);

La pregunta es si esto es a prueba de inyección SQL de la misma manera que lo son las consultas parametrizadas.

¿Fue útil?

Solución

Hice una investigación, y encontré esto:

  

En mis pruebas simples, parece que   los parámetros pasados ??en el   ExecuteQuery y ExecuteCommand   Los métodos son automáticamente codificados en SQL   basado en el valor que se suministra. Asi que   si pasas una cadena con un '   carácter, automáticamente se SQL   escapar a ''. Creo una similar   La política se usa para otros tipos de datos.   como DateTimes, Decimales, etc.

http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx
(Tienes que desplazarte hacia abajo para encontrarlo)

Esto me parece un poco extraño: la mayoría de las otras herramientas de .Net saben que no deben " Escapar de SQL " cualquier cosa; usan parámetros de consulta reales en su lugar.

Otros consejos

LINQ to SQL usa exec_sql con parámetros, lo cual es mucho más seguro que concatenar en la cadena de consulta ad-hoc. Debería ser tan seguro contra la inyección de SQL como usar SqlCommand y su colección de parámetros (de hecho, es probablemente lo que LINQ to SQL usa internamente). Por otra parte, ¿qué tan seguro es eso ?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top