2010-08-13 21 views
5

Es posible que un proyecto que utilice completamente LinqToSQL o Entity Framewok sufra de Inyección SQL.Entity Framework, LinqToSQL e inyección sql

Creo que probablemente no porque el SQL que genera el ORM debe ser sql-injection free. Pero no estoy seguro.

+1

duplicado de http://stackoverflow.com/questions/473173/will-using-linq-to-sql-help-prevent-sql -injection –

+1

No exactamente duplicado ya que esto también requiere Entity Framework. También las respuestas dicen que hay una posibilidad de ataque en algunas circunstancias –

Respuesta

10

Cuando utiliza esos marcos como se pretendía, es decir, las entidades/tablas directamente, entonces no. Todas las comparaciones de cadenas (es decir, where name = 'smith') están parametrizadas.

Los únicos puntos vulnerables son:

  • cualquier cadena puede ser ejecutado directamente contra el contexto. dbContext.ExecuteQuery(); con cualquier tipo de cadena destructiva.

  • un procedimiento almacenado ejecutar SQL dinámico utilizando cualquier parámetro dado

+1

en VS2012 fuera de la caja. _ Donde (a => a.column == "Citar '") _ se tradujo a una variable enlazada _ @ 1 = [Extensión1]. [Columna] _. Y _ Where (a => a.column! = "Quote '") _ traducido a _ N'Quote' '' = [Extensión1]. [Columna] _ –

3

"Depende".

Las consultas simples de LINQ contra entidades L2S o EF son inyectables, pero siempre se puede llamar a un procedimiento almacenado o una función que no es segura para inyección.

Eso sería claramente un caso límite, pero sí sucede que las personas escriben SP/funciones que están abiertas a la inyección (componiendo SQL-in-strings con valores de parámetros dentro del proceso).