consultas - ¿Son posibles los ataques de inyección SQL en JPA?
consultas sql en jpa (4)
Estoy construyendo una aplicación web Java usando Java EE 6 y JSF-2.0, usando la API de persistencia para todas las operaciones de la base de datos.
El back-end es MySQL, pero he usado las funciones EntityManager y las consultas con nombre en EJB-QL para todas las operaciones. ¿Son posibles los ataques de inyección SQL en este caso?
En caso de que esté preguntando desde una perspectiva ofensiva / práctica, si una declaración JPQL se construye a partir de la entrada del usuario, considere la siguiente información del usuario:
blah'') AND FUNCTION(''user like chr(65)||chr(37) AND 42 - '', 1) > 40 AND (''42''=''42
Si la víctima está utilizando una implementación JPA> = 2.1, y la base de datos back-end es Oracle, algo como lo anterior puede actuar como una inyección SQL booleana para decirle si el usuario de la base de datos comienza con ''A''.
Sí, es posible. Depende de la forma en que implemente.
Eche un vistazo a Prevención de inyección en lenguaje de consulta JPA .
Si su proveedor de JPA procesa todos los argumentos de entrada para manejar los ataques de inyección, entonces debe estar cubierto. Hacemos delgados en EclipseLink.
Como el cartel anterior mencionó el ensamblado de su propia JPQL o SQL (para consultas nativas) podría exponerlo.
Recomendaría usar consultas con nombre con parámetros sobre concatenar cadenas para construir JPQL / SQL.
Doug
Solo es posible si está enlistando variables controladas por el usuario en una cadena SQL / JPQL así:
String sql = "SELECT u FROM User u WHERE id=" + id;
Si no está haciendo eso y solo está utilizando consultas parametrizadas / nombradas, entonces está a salvo.