Un framework ORM come Hibernate riduce completamente l'iniezione SQL?

19

So che per impedire a tutti o alla maggior parte degli attacchi SQL injection di utilizzare query parametrizzate. Sto usando Hibernate per un po 'invece di scrivere a mano le mie istruzioni SQL. Esistono attacchi o ricerche noti diretti allo sfruttamento di questo livello?

    
posta Casey 09.12.2010 - 19:49
fonte

3 risposte

14

No, non sei automaticamente sicuro.
SQL Injection può ancora esistere.

Dalla pagina OWASP :

A note about SQL injection

Since it is the hot topic, I will address it now but discuss in detail later.

  • Hibernate does not grant immunity to SQL Injection, one can misuse the api as they please.
  • There is nothing special about HQL (Hibernates subset of SQL) that makes it any more or less susceptible.
  • Functions such as createQuery(String query) and createSQLQuery(String query) create a Query object that will be executed when the call to commit() is made. If the query string is tainted you have sql injection. The details of these functions are covered later.
    
risposta data 09.12.2010 - 20:25
fonte
4

Oltre alle altre risposte, un'area in cui gli ORM potrebbero non essere d'aiuto, è dove c'è un problema con il codice ORM stesso. Per esempio ci sono stati un paio di problemi con ActiveRecord in Rails alcuni versioni fa dove l'iniezione SQL era nel framework stesso piuttosto nel codice creato dall'utente.

Il corretto utilizzo di un ORM ha reso molto più semplice evitare l'SQL injection, quindi sarebbe una buona strategia perseguire, al contrario delle query di crafting.

    
risposta data 10.12.2010 - 17:53
fonte
0

In questo post sul blog c'è un codice di esempio utilizzando nHibernate's CreateSQLQuery che sarà vulnerabile all'iniezione SQL, nonché un modo appropriato di scrivere la stessa query utilizzando la query parametrizzata nel proprio framework ORM per evitare l'iniezione. Alla fine della giornata, indipendentemente da come si creano query SQL, utilizzando string concating o ORM per gestire input come oggetti e attributi, se si creano query dinamiche, il codice SQL iniettato può essere eseguito nel database. Ma se si parametrizza, si sta dicendo al database che una query "Select" o "Insert" viene fornita con questi due input, ad esempio, e anche se gli input contengono un codice SQL, il database non li esegue.

    
risposta data 27.01.2015 - 01:19
fonte

Leggi altre domande sui tag