2012-04-12 16 views
5

Per evitare iniezioni SQL, normalmente parametri posizionali e parametri denominati possibile utilizzare il HQL come demo here e StackOverflow ha anche campioni. Voglio sapere quali passaggi possono essere presi quando viene utilizzato Criteria. Qualsiasi aiuto con codici di esempio o collegamenti utili per favore.SQL Injection attraverso Hibernate-Criteri & Session.save (oggetto)

Modifica
Anche quando si salva un oggetto? diciamo, l'oggetto può avere una variabile String e qualcuno può assegnare una query sql vulnerabile ad esso.

myObject.setName(somevulnerablesql); session.save(myObject); 

In tal caso, dovremmo controllare separatamente l'input dell'utente prima di assegnarlo all'oggetto? o altri passaggi per evitare tali iniezioni sql?

risposta

4

Sono abbastanza sicuro che l'oggetto Criteria creerà HSQL sicuro.

È necessario fare attenzione con l'oggetto Expression. È possibile creare un'iniezione SQL lì. Ma date un'occhiata al codice SQL generato: Hibernate show real SQL

edit: A meno che non v'è un enorme bug in Hibernate, non c'è bisogno di fare in modo, che i String s sono fuggiti prima di salvarle. Hibernate funziona con dichiarazioni preparate. Quindi non c'è concatenazione di stringhe e nessuna iniezione SQL con la sessione di Hibernate.

Potrebbe essere necessario sfuggire all'uscita tuttavia dopo averlo letto con Ibernazione. Per esempio: Hai un'impresa utilizzatrice

class User{ 
    String name; 
} 

E si chiama l'utente "' o 1 = 1; utente DROP DATABASE; -" quella stringa sarà memorizzato all'interno del database. Se si interroga l'utente con un oggetto criterio, lo si troverà (senza che il databse venga rilasciato). Se si interroga l'utente con l'oggetto Expression, è possibile eliminare il database (se si concentra Stringhe).

Se si invia il nome dell'utente a HTML, è necessario sfuggire all'output. In caso contrario, un utente con un nome "/><script>evilJavascript()</script> non funzionerà correttamente.

Edit 2: un'occhiata qui: https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

+0

Grazie. La mia prossima domanda è stata quella !!! Ho modificato la mia domanda. –

3

I criteri non consentono di scrivere SQL/HQL vulnerabili da soli, quindi non ci dovrebbero essere problemi con l'iniezione SQL (a meno che non ci sia un bug in Hibernate stesso).

Edit:

Come @ckuetbach sottolineato, Criteri consente in realtà di scrivere SQL utilizzando Expression.sql(String sql) o Restrictions.sqlRestriction(String).

+1

Non completare corretta penso: http://docs.jboss.org/hibernate/orm/3.3/api/org/hibernate/criterion/ Expression.html –

+0

@ ckuetbach.Thanks. Spiegheresti di più per favore con qualche snip del codice? –

+0

@ckuetbach concordato, non ero a conoscenza di ciò. Aggiornerò la mia risposta – Thomas

Problemi correlati