2010-08-09 52 views
33

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.¿Son posibles los ataques de inyección SQL en JPA?

El back-end es MySQL, pero he utilizado 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?

Respuesta

31

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

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

Si usted no está haciendo eso y está utilizando consultas con parámetros/designado, entonces esta a salvo

+4

Si se usa 'em.persist (usuario);' donde 'usuario' se completa con, err, usuario? –

+0

¿La respuesta a eso sería? ... – user435421

11

Sí, es posible. Depende de la forma en que implemente.
Echa un vistazo a Preventing injection in JPA query language.

+0

+1 Enlace muy interesante. Gracias. – Akshay

+1

Yo recomendaría echarle un vistazo al artículo de SANS también, tiene más muestras/presentaciones: http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-persistence- api-jpa – eckes

5

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 utilizar consultas con nombre con parámetros sobre concatenar cadenas para compilar JPQL/SQL.

Doug

Cuestiones relacionadas