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?
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é.
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 .
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