2010-08-09 3 views
33

Ich baue eine Java-Webanwendung mit Java EE 6 und JSF-2.0 und verwende die Persistence-API für alle Datenbankoperationen.Sind SQL Injection-Angriffe in JPA möglich?

Das Backend ist MySQL, aber ich habe die EntityManager-Funktionen und Named Queries in EJB-QL für alle Operationen verwendet. Sind in diesem Fall SQL-Injection-Angriffe möglich?

Antwort

31

Es ist nur möglich, wenn Sie wie so benutzergesteuerten Variablen in einer SQL/JPQL String sind inlining:

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

Wenn Sie tun das nicht und werden mit parametrisierte/benannten Abfragen nur, Sie dann sind in Sicherheit.

+4

Bei Verwendung von 'em.persist (user);' wobei 'user' von dem, err, user gefüllt wird? –

+0

Antwort auf das wäre? ... – user435421

11

Ja, es ist möglich. Es hängt davon ab, wie Sie es implementieren.
Werfen Sie einen Blick auf Preventing injection in JPA query language.

+0

+1 Sehr interessanter Link. Vielen Dank. – Akshay

+1

Ich würde empfehlen, den SANS Artikel auch zu überprüfen, es hat mehr Beispiele/Einführungen: http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-persistence- api-jpa – eckes

5

Wenn Ihr JPA-Anbieter alle Eingabeargumente verarbeitet, um Injektionsattacken zu behandeln, sollten Sie abgedeckt sein. Wir machen dünn in EclipseLink.

Wie das vorherige Poster erwähnt, das Zusammenfügen Ihrer eigenen JPQL oder SQL (für native Abfragen) könnte Sie entlarven.

Ich würde empfehlen, benannte Abfragen mit Parametern über verketteten Strings zu verwenden, um JPQL/SQL zu erstellen.

Doug

Verwandte Themen