Est le @Requête annotation au printemps SQL Injection sécuritaire?

Ne les paramètres d'une chaîne de caractères passée à la @Requête d'annotation, pour le Printemps, considérée comme pure data, comme ils le feraient si, par exemple, vous avez été en utilisant le PreparedStatement classe ou la méthode, destinée à prévenir l'injection SQL?

final String MY_QUERY = "SELECT * FROM some_table WHERE some_column = ?1";

@Query(value=MY_QUERY, nativeQuery = true)
List<SomeEntity> findResults(String potentiallyMaliciousUserInput);

Ligne du bas: Est le code ci-dessus sensibles à l'injection SQL?

Doit MY_QUERY pas être statique?
Oui je le crois. J'ai rencontrer des problèmes en essayant de créer dynamiquement des composants de requête à alimenter la Requête. Je crois que les paramètres sont ce à quoi vous avez accès à modifier.
En fait, je pense que c'est par la conception. Cela vous encourage à ne pas construire le SQL à l'aide de la concaténation de chaîne, mais en utilisant une instruction préparée paramètres. (Mais je ne suis pas tout à fait sûr.)
C'est je pense trop. Il peut aussi avoir à faire avec la façon dont les requêtes sont transformés au moment de l'exécution d'instructions sql. Je crois que cette transformation a lieu au Printemps lorsque le fèves sont en cours d'initialisation qui est aussi l'avant de votre propre code est exécuté. Ou mettre une autre manière, votre requête doit être prêt pour le haricot temps d'initialisation, moins préparés de paramètres.
Je l'ai vérifié. MY_QUERY ne doit pas être statique, mais définitive.

OriginalL'auteur Usman Mutawakil | 2015-01-20