Estoy en la construcción de un IQueryable donde estoy aplicando pertinentes filtros, y me encuentro con esta línea de código aquí.

items = items.OrderBy(string.Format("{0} {1}", sortBy, sortDirection));

Es este fragmento de código vulnerable a inyección SQL? O son estos (cadena) parámetros parametrizada detrás de las escenas? Supuse que todas las consultas Linq se escapó y parametrizada para mí, pero el hecho de que soy capaz de pasar de una cadena directamente como esto es tirar los que me fuera.

Hace que la instrucción de trabajo para usted? ¿Tienes estático de un método de extensión de la aplicación? Yo no estoy familiarizado con OrderBy no tomar una lamba expresión.
Esta extensión se encuentra en el System.Linq.Dynamic espacio de nombres. con una firma de método static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values).
Se ve como Sistema.Linq.Dinámica es un proyecto de código abierto alojado en CodePlex. El código fuente está en dynamiclinq.codeplex.com/SourceControl/latest#DynamicLinq/…. Por lo que puedo ver que están tomando los datos de cadena y usarlo para modificar el árbol de expresión así que no, no es vulnerable a inyección SQL.

OriginalEl autor alexhuang | 2016-09-07

1 Comentario

  1. 17

    Primer Punto :

    Tienes que evitar volver IQueryable<T> tipos de métodos que se exponen potencialmente no son de confianza los que llaman para el siguientes razones:

    • Un consumidor de una consulta que expone un IQueryable<T> tipo podría llamar
      métodos en el resultado que exponen datos seguros o aumentar el tamaño de
      el conjunto de resultados. Por ejemplo, considerar el siguiente método de firma:

      public IQueryable<Customer> GetCustomer(int customerId)

    Un consumidor de esta consulta podría llamar .Include("Orders") en el devuelto IQueryable<Customer> para recuperar datos de que la consulta no la intención de exponer. Esto se puede evitar cambiando el tipo de retorno del método para IEnumerable<T> y se llama a un método (como .ToList()) que se materializa en los resultados.

    • Porque IQueryable<T> de consultas se realiza cuando los resultados son
      iterado, un consumidor de una consulta que expone un IQueryable<T>
      tipo podría capturar las excepciones que se producen. Exceptions podría contener
      la información no tiene la intención para el consumidor.

    Segundo Punto :

    Cómo prevenir ataques de inyección de SQL ?

    • Entidad ataques de inyección de SQL:

    Los ataques de inyección SQL se pueden realizar en la Entidad SQL mediante el suministro de malicious input a los valores que se utilizan en un query predicate y en parameter names.

    Para evitar el riesgo de inyección de SQL

    nunca se debe combinar la entrada del usuario con la Entidad de texto de comando SQL

    Entidad consultas SQL accept parameters en todas partes que se aceptan literales. Debe utilizar consultas parametrizadas en lugar de inyectar los literales de un agente externo directamente en la consulta. Usted debería considerar también la posibilidad de el uso de métodos del generador de consultas de forma segura la construcción de Entity SQL.

    • LINQ to entities ataques de inyección:

    Aunque la composición de consultas es posible en LINQ to entities, se realiza a través de la API del modelo de objetos. A diferencia de la Entidad consultas SQL, consultas de LINQ to entities no se compone mediante la manipulación de cadenas o de concatenación, y que no son susceptibles a los tradicionales ataques de inyección de SQL.

    Referencia : Consideraciones de Seguridad (Entity Framework)

    OriginalEl autor Sampath

Dejar respuesta

Please enter your comment!
Please enter your name here