linq - tipos - sql injection php
¿ExecuteCommand de LINQ brinda protección contra ataques de inyección SQL? (2)
Tengo una situación en la que necesito usar el método ExecuteCommand de LINQ para ejecutar una inserción.
Algo así como (simplificado a los fines 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 prueba de inyección SQL de la misma manera que las consultas parametrizadas.
LINQ to SQL usa exec_sql con parámetros, que es mucho más seguro que concatenar en la cadena de consulta ad-hoc. Debería ser tan seguro como la inyección SQL como el uso de SqlCommand y su colección Paramaters (de hecho, es probablemente lo que LINQ to SQL usa internamente). Por otra parte, ¿qué tan seguro es eso ?
Hice algunas investigaciones, y encontré esto:
En mi prueba simple, parece que los parámetros pasados en los métodos ExecuteQuery y ExecuteCommand son automáticamente codificados por SQL en función del valor que se suministra. Entonces, si pasa una cadena con un carácter '', automáticamente SQL lo escapará a'' ''. Creo que se usa una política similar 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
(Has desplazado hacia abajo para encontrarlo)
Esto me parece un poco extraño: la mayoría de las otras herramientas .Net saben mejor que "SQL escapar" cualquier cosa; ellos usan parámetros de consulta reales en su lugar.