¿Son las funciones del operador de SQL para el marco de entidades Seguro contra la inyección de SQL? -- # campo con entity-framework campo con sql-injection camp Relacionados El problema

Are SQL operator functions for Entity Framework safe against SQL injection?


8
vote

problema

Español

Estas funciones proporcionan acceso a funciones especiales (SQLClient) en SQL. Por ejemplo, 'como' o 'entre'. Y también le dan una capa más bonita de abstracción común para ellos. No debe confundirse con los procedimientos almacenados "funciones", que es el tema de este otro Pregunta .

Mi pregunta de que parece que no puedo encontrar una respuesta completa. ¿Son seguros de usar, o estoy abriendo el sistema a una ataque de inyección de SQL ? Siempre uso variables unidas cuando escribo SQLCOMYS regulares.

pero al mudarte al marco de entidad. Hay menos control sobre las afirmaciones de SQL. No me importa, pero no puedo evitar preocuparme cuando concate una cadena que viene de un navegador y lo pasa a una función.

Aquí hay un ejemplo:

  var QueryResult = EFContext.Table.Where(x =>      SqlFunctions.PatIndex("%" + Potentially_unsafe_search_keyword + "%",                            x.Column) > 0);   

Hice algunas pruebas y trazó el SQL real enviado al servidor. Se escapan automáticamente comillas simples. Tan claramente hay algo de protección allí. Hay algún lugar de desinfección. Insertar declaraciones Utilice variables de enlace. ¿Debo estar contento con el reemplazo único de cotización? ¿Hay algo más que pase detrás de las escenas?

Original en ingles

These functions give access to specialty functions (SqlClient) in SQL. For example 'like' or 'between'. And they also give a nicer common abstraction layer for them. Not to be confused with stored procedure(s) "functions" which is the topic of this other question.

My question that I can't seem to find a full answer for is. Are they safe to use, or am I opening the system to a SQL injection attack? I always use bound variables when writing regular SqlCommands.

But in moving to Entity Framework. There is less control over the SQL statements. I don't mind it, but I can't help worrying when I concatenate a string coming from a browser and pass it to a function.

Here is an example:

var QueryResult = EFContext.Table.Where(x =>      SqlFunctions.PatIndex("%" + Potentially_unsafe_search_keyword + "%",                            x.Column) > 0); 

I did some tests and traced the actual SQL sent to the server. Single quotes are escaped out automatically. So clearly there is some protection there. There is some sanitization taking place. Insert statements do use bind variables. Should I be content with the single quote replacement? Is there something else going on behind the scenes?

        
     
     

Lista de respuestas

5
 
vote
vote
La mejor respuesta
 

Cada parámetro constante, variable, en LINQ se pasa como parámetro de comando en IDBCommand, que a su vez se escapa al conductor subyacente.

A menos que haya un error, todas las consultas EF y las funciones de SQL Helper son seguras contra los ataques de inyección de SQL.

 

Every Constant, variable, parameter in Linq is passed as command parameter in IDbCommand, which in turn is escaped by underlying driver.

Unless there is a bug, all EF queries and SQL helper functions are safe against SQL injection attacks.

 
 

Relacionados problema

6  Prevención de la inyección de SQL en JDBC sin usar declaraciones preparadas  ( Preventing sql injection in jdbc without using prepared statements ) 
Soy consciente de que el uso de declaraciones preparadas es la mejor manera de proteger contra la inyección de SQL (y los errores de sintaxis debido a los car...

10  ¿Linq dinámico con entrada de usuario directa, cualquier peligro?  ( Dynamic linq with direct user input any dangers ) 
Tengo una tabla en una aplicación ASP.NET MVC que quiero ser ordenable (Serverside) y filtrable con AJAX. Quería que fuera bastante fácil de usar en otros lug...

19  ¿Cómo puedo evitar los ataques de inyección de SQL en mi aplicación ASP.NET?  ( How can i avoid sql injection attacks in my asp net application ) 
Necesito evitar ser vulnerables a la inyección de SQL en mi aplicación ASP.NET. ¿Cómo puedo lograr esto? ...

3  Validación integral del lado del servidor  ( Comprehensive server side validation ) 
Actualmente tengo un sistema de validación del lado del servidor bastante robusto, pero busco algún comentario para asegurarse de que haya cubierto todos los ...

0  Distinguir los datos del usuario de los nombres de los parámetros en una consulta con marcadores de posición  ( Distinguish user data from parameter names in a query with placeholders ) 
Estoy usando una clase para construir una consulta MySQL con parámetros con nombre para unir los datos a él. Una consulta de ejemplo puede ser. INSERT INTO...

5  Protección contra inyección de SQL [duplicado]  ( Protection against sql injection ) 
Esta pregunta ya tiene respuestas aquí : ¿Cómo puedo prevenir la inyección de SQL en PHP? ...

-2  Ayuda de inyección de SQL necesitada [cerrada]  ( Sql injection help needed ) 
cerrado . Esta pregunta debe ser más enfocado . Actualmente no está aceptando respuestas. ...

25  Cogiendo la inyección de SQL y otras solicitudes web maliciosas  ( Catching sql injection and other malicious web requests ) 
Estoy buscando una herramienta que pueda detectar las solicitudes maliciosas (como la inyección o las publicaciones obvias de SQL) e prohibirá inmediatamente ...

2773  ¿Cómo puedo prevenir la inyección de SQL en PHP?  ( How can i prevent sql injection in php ) 
Las respuestas de esta pregunta son una esfuerzo comunitario . Edite las respuestas existentes para mejorar esta publicación. Actualmente no está...

0  Insertar retrasado y prevención de la inyección de SQL  ( Insert delayed and prevention of sql injection ) 
anteriormente utilicé Model.create() Para insertar una fila, ahora, quiero usar la opción retrasada en MySQL. pero, si escribo ActiveRecord::Base...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos