2011-01-05 14 views
10

Ho usato hibernate per interagire con il mio database, ora volevo rendere il mio livello di database sicuro contro SQL Injection, quindi ho fatto qualche ricerca e ho scoperto che le mie query dovevano essere parametrizzate, così fa significa se ho appena strutturare la mia query HQL come:Prevenzione contro SQL Injection in Hibernate

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?") 
.setString(0, name) 
.list(); 

Poi è parametrizzato e protetto da SQL Injection, o c'è qualche altra cosa che ho bisogno di fare ...

Un'altra cosa è stato menzionato - "Evita sempre i tuoi dati "Come si può ottenere?

risposta

4

Non so su setString() ma se è lo stesso di setParameter() allora sì, è sufficiente farlo per evitare SQL injection.

Aggiornamento

In fuga di dati, significa che è necessario assicurarsi che non si memorizzano valori pericolosi nel database.

Un esempio veloce è per esempio se si passa nell'argomento

String name = "<script>alert('Hello');</script>"; 
//insert this name into Mother, and then when you load it from the database, it will be displayed  

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?") 
.setString(0, name) 
.list(); 

per la tua ricerca, allora la prossima volta che si carica questo dal database e lo rendono nel browser Web, verrà eseguito lo script .
È necessario assicurarsi che il framework sfugga a tutti i caratteri non consentiti, ovvero: modifica < a &lt; prima di inserirlo nel database.
Se il tuo framework non lo fa, devi farlo manualmente. Ci sono tonnellate di librerie là fuori che escapes correttamente il codice per te. Dai un'occhiata a this question per esempio e le risposte lì.

+0

Ho esaminato il link che hai proposto .. le persone suggeriscono soluzioni per l'escape in HTML .. Esiste un altro tipo di escape richiesto ?? –

+3

-1. La fuga di dati di input non è un buon approccio alla prevenzione dell'XSS. Il modo migliore è quello di sfuggire ai dati non attendibili quando li inserirai in un contesto pericoloso (come la pagina HTML), tenendo conto delle regole di quel contesto. Vedi anche [OWASP XSS Prevention Cheat Sheet] (http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet). Inoltre, la domanda era sull'iniezione SQL, non su XSS. – axtavt

+0

@axtavt Se leggete la mia risposta e commentate all'interno del codice vedrete che accenno al fatto che i dati devono essere salvati al momento dell'inserimento nella tabella Madre. –

Problemi correlati