¿Un marco de ORM como Hibernate mitiga completamente la inyección de SQL?

19

Sé que para evitar todos o la mayoría de los ataques de inyección SQL, debe usar consultas parametrizadas. He estado usando Hibernate por un tiempo en lugar de escribir mis declaraciones SQL a mano. ¿Se conocen ataques o investigaciones dirigidas a explotar esta capa?

    
pregunta Casey 09.12.2010 - 19:49
fuente

3 respuestas

14

No, no estás automáticamente seguro.
La inyección SQL todavía puede existir.

De la página OWASP :

  

Una nota sobre la inyección de SQL

     

Ya que es el tema candente, lo haré   abordarlo ahora, pero discutir en detalle   luego.

     
  • Hibernate no otorga inmunidad a   Inyección SQL, uno puede hacer mal uso de la api   como les plazca
  •   
  • no hay nada   especial sobre HQL (subconjunto de hibernaciones   de SQL) que lo hace más o menos   susceptible.
  •   
  • Funciones tales como   createQuery (consulta de cadena) y   createSQLQuery (consulta de cadena) crea un   Objeto de consulta que será ejecutado.   cuando se realiza la llamada a commit (). Si   la cadena de consulta está contaminada que tienes   inyección SQL. Los detalles de estos   las funciones se tratan más adelante.
  •   
    
respondido por el AviD 09.12.2010 - 20:25
fuente
4

Además de las otras respuestas, un área en la que los ORM no pueden ayudar, es donde hay un problema con el código ORM en sí. Por ejemplo, hubo un par de problemas con ActiveRecord en Rails hace versiones anteriores donde la inyección de SQL estaba en el marco en lugar del código creado por el usuario.

El hecho de que se diga correctamente el uso de un ORM hace que sea mucho más fácil evitar la inyección de SQL, por lo que sería una buena estrategia a seguir, en lugar de realizar consultas a mano.

    
respondido por el Rоry McCune 10.12.2010 - 17:53
fuente
0

En esta publicación de blog hay un código de ejemplo utilizando CreateSQLQuery de nHibernate que será vulnerable a la inyección de SQL, así como una forma adecuada de escribir la misma consulta utilizando la consulta parametrizada en su marco de ORM para evitar la inyección. Al final del día, sin importar cómo cree consultas SQL, use la conciliación de cadenas u ORM para tratar la entrada como objetos y atributos, si crea consultas dinámicas, el código SQL inyectado puede ejecutarse en la base de datos. Pero si lo parametriza, le está diciendo a la base de datos que una consulta "Seleccionar" o "Insertar" viene con estas dos entradas, por ejemplo, e incluso si las entradas contienen algún código SQL, la base de datos no las ejecuta.

    
respondido por el Goli E 27.01.2015 - 01:19
fuente

Lea otras preguntas en las etiquetas