Pregunta

Estoy construyendo una aplicación Web Java usando Java EE 6 y JSF-2.0, utilizando el API de persistencia para todas las operaciones de bases de datos.

El back-end es MySQL, pero he utilizado las funciones EntityManager y con nombre consultas en EJB-QL para todas las operaciones. Son los ataques de inyección SQL posible en este caso?

¿Fue útil?

Solución

Es posible sólo si está inlining las variables controladas por el usuario en una cadena SQL / JPQL este modo:

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

Si usted no está haciendo eso y están utilizando parametrizar / consultas con nombre solamente, entonces usted está seguro.

Otros consejos

Sí, es posible. Depende de la forma en que se implementa.
Echar un vistazo a Prevención de la inyección en la APP consulta en lenguaje .

Si su proveedor JPA procesa todos los argumentos de entrada a los ataques de inyección de mango, entonces debe ser cubierto. Hacemos delgada en EclipseLink.

Como el anterior mencionó armando su propio JPQL o SQL (para consultas nativas) podría exponer a usted.

Yo recomendaría el uso de consultas con nombre con los parámetros sobre la concatenación de cadenas para construir JPQL / SQL.

Doug

En caso de que usted está pidiendo desde una perspectiva ofensiva / práctica, si una declaración JPQL se construye a partir de la entrada del usuario, considere la siguiente entrada 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 aplicación APP> = 2.1, y la base de datos back-end es Oracle, algo así como el anterior puede actuar como una inyección SQL booleano que le diga si el usuario de base de datos comienza con 'A'.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top