Domanda

Sto costruendo un'applicazione Web Java utilizzando Java EE 6 e JSF-2.0, utilizzando l'API di persistenza per tutte le operazioni di database.

Il back-end è MySQL, ma ho usato le funzioni EntityManager e Named Query in EJB-QL per tutte le operazioni. Sono attacchi SQL injection possibile in questo caso?

È stato utile?

Soluzione

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

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

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

Altri suggerimenti

Sì, è possibile. Dipende dal modo in cui si sceglie di implementare.
Dai un'occhiata alla Prevenire iniezione JPA Query Language .

Se il provider JPA elabora tutti gli argomenti di input per attacchi di iniezione maniglia allora si dovrebbe essere coperto. Facciamo sottile EclipseLink.

Come la recensione precedente menzionato mettere insieme il proprio JPQL o SQL (per le query native) potrebbe esporre l'utente.

Ti consiglio di utilizzare query denominate con i parametri sopra concatenazione di stringhe per costruire JPQL / SQL.

Doug

Nel caso in cui si sta chiedendo da un punto di vista offensivo / pratico, se una dichiarazione JPQL è costruito da input dell'utente, si consideri il seguente input dell'utente:

blah') AND FUNCTION('user like chr(65)||chr(37) AND 42 - ', 1) > 40 AND ('42'='42

Se la vittima sta usando un'implementazione JPA> = 2.1, e il database back-end è Oracle, qualcosa di simile a quanto sopra può agire come un'iniezione booleana SQL di dirvi se l'utente del database inizia con 'A'.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top