web-dev-qa-db-fra.com

Des attaques par injection SQL sont-elles possibles dans JPA?

Je construis une application Web Java avec Java EE 6 et JSF-2.0, en utilisant l'API de persistance pour toutes les opérations de base de données.

Le back-end est MySQL, mais j'ai utilisé les fonctions EntityManager et les requêtes nommées dans EJB-QL pour toutes les opérations. Des attaques par injection SQL sont-elles possibles dans ce cas?

37
Akshay

Ce n'est possible que si vous insérez des variables contrôlées par l'utilisateur dans une chaîne SQL/JPQL comme ceci:

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

Si vous ne le faites pas et utilisez uniquement des requêtes paramétrées/nommées, vous êtes en sécurité.

37
BalusC

Oui c'est possible. Cela dépend de la façon dont vous implémentez.
Consultez Prévention des injections dans le langage de requête JPA

11
Jigar Joshi

Si votre fournisseur JPA traite tous les arguments d'entrée pour gérer les attaques par injection, vous devez être couvert. Nous faisons mince dans EclipseLink.

Comme l'a déjà mentionné l'affiche, l'assemblage de votre propre fichier JPQL ou SQL (pour les requêtes natives) peut vous exposer 

Je recommanderais d'utiliser des requêtes nommées avec des paramètres plutôt que de concaténer des chaînes pour construire JPQL/SQL.

Doug

5
Doug Clarke