Frage

Ich baue eine Java-Web-Anwendung mit Java EE 6 und JSF-2.0, die Persistenz-API für alle Datenbankoperationen verwendet wird.

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

War es hilfreich?

Lösung

Es ist nur möglich, wenn Sie inlining benutzergesteuerte Variablen in einem String SQL / JPQL wie folgt:

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

Wenn Sie nicht tun, dass und parametriert werden mit / benannten Abfragen nur, dann Sie sind sicher.

Andere Tipps

Ja, ist es möglich. Es hängt von der Art und Weise Sie implementieren.
Hier finden Sie aktuelle Verhindern Injektion in JPA-Abfragesprache .

Wenn Ihr JPA-Provider verarbeitet alle Eingabeargumente zu Handle-Injection-Angriffe, dann sollten Sie abgedeckt werden. Wir tun dünn in Eclipse.

Wie das vorherige Plakat piecing erwähnt zusammen, um Ihre eigene JPQL oder SQL (für native Abfragen) können Sie aussetzen.

Ich würde empfehlen, benannten Abfragen mit Parametern über Strings verketten JPQL / SQL zu bauen.

Doug

Falls Sie sich von einer offensiven / praktischer Perspektive zu fragen, ob eine JPQL Anweisung von Benutzereingaben aufgebaut ist, sollten Sie die folgende Benutzereingabe:

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

Wenn das Opfer mit einer JPA-Implementierung> = 2,1, und die Back-End-Datenbank ist Oracle, so etwas wie die oben als boolean SQL-Injection handeln können Ihnen sagen, wenn die Datenbankbenutzer beginnen mit ‚A‘.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top