it-swarm-es.com

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

Sé que para prevenir todos o la mayoría de los ataques de inyección SQL, debes usar consultas parametrizadas. He estado usando Hibernate por un tiempo en lugar de escribir a mano mis declaraciones SQL. ¿Existen ataques o investigaciones conocidos que estén dirigidos a explotar esta capa?

18
Casey

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

Desde página OWASP :

Una nota sobre la inyección SQL

Dado que es el tema candente, lo abordaré ahora, pero lo discutiré en detalle más adelante.

  • Hibernate no otorga inmunidad a la inyección de SQL, uno puede hacer un mal uso de la API como desee.
  • No hay nada especial en HQL (subconjunto Hibernates de SQL) que lo haga más o menos susceptible.
  • Funciones como createQuery (consulta de cadenas) y createSQLQuery (consulta de cadenas) crean un objeto de consulta que se ejecutará cuando se realice la llamada a commit (). Si la cadena de consulta está contaminada, tiene inyección SQL. Los detalles de estas funciones se tratan más adelante.
13
AviD

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

Dicho esto, el uso correcto 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 persistir, en lugar de realizar consultas a mano.

4
Rory McCune

En esta publicación de blog hay un código de muestra que usa CreateSQLQuery de nHibernate que será vulnerable a la inyección de SQL, así como una forma apropiada de escribir la misma consulta usando una consulta parametrizada en su marco ORM para evitar la inyección. Al final del día, no importa cómo cree las consultas SQL, utilizando la concatenació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.

0
Goli E