2010-08-09 20 views
33

Sto costruendo un'applicazione Web Java utilizzando Java EE 6 e JSF-2.0, utilizzando l'API di persistenza per tutte le operazioni del database.Gli attacchi di SQL injection sono possibili in JPA?

Il back-end è MySQL, ma per tutte le operazioni sono state utilizzate le funzioni EntityManager e Query denominate in EJB-QL. In questo caso sono possibili attacchi di SQL injection?

risposta

31

E 'possibile solo se si sta inlining variabili controllate dall'utente in un/string JPQL SQL in questo modo:

String sql = "SELECT u FROM User u WHERE id=" + id; 

Se non si sta facendo questo e utilizza parametrizzati/query denominate solo, allora si sei al sicuro.

+4

Se si utilizza 'em.persist (utente);' dove 'utente' è compilato dall'utente err,? –

+0

Risposta a quello sarebbe? ... – user435421

11

Sì, è possibile. Dipende dal modo in cui si implementa.
Dai uno sguardo a Preventing injection in JPA query language.

+0

+1 Collegamento molto interessante. Grazie. – Akshay

+1

Consiglierei di controllare anche l'articolo SANS, ha più esempi/introduzioni: http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-persistence- api-jpa – eckes

5

Se il proprio provider JPA elabora tutti gli argomenti di input per gestire gli attacchi di iniezione, si dovrebbe essere coperti. Facciamo thin in EclipseLink.

Poiché il poster precedente menzionava il raggruppamento del proprio JPQL o SQL (per le query native) potrebbe esporlo.

Si consiglia di utilizzare query denominate con parametri sulla concatenazione di stringhe per creare JPQL/SQL.

Doug

Problemi correlati