2012-04-06 38 views
5

Como leo en muchos artículos, cuando uso la consulta JPA/Hibernate, es bueno establecer parámetros en mis consultas para evitar la inyección SQL. Me gusta:Consulta JPA - inyección sql en parámetros posicionales jpa consulta nativa

select user from User user where user.name = :name and user.surname = :surname 

Mi problema es que, en algunos casos, necesito utilizar la consulta nativa cuando creo mi consulta.

Usaré mi administrador de entidad y createNativeQuery. Pero en este caso los parámetros serán posicionales. Al igual que:

select * from users where user_name = ? and user_surname = ? 

Luego, en mi consulta que se utilice el método setParameter(1, "name") etc. Así es este caso "inyección SQL prueba" como cuando en la consulta con parámetros?

+1

Sí, escapará correctamente de los parámetros cuando use el método setParameter para que solo se use como datos. Las vulnerabilidades de inyección surgen al construir las cadenas usted mismo utilizando los parámetros proporcionados por el usuario y no escapar correctamente. – kevingallagher

Respuesta

4

si no utiliza las operaciones de cadenas para la construcción de su consulta como

"SELECT foo FROM bar Where id="+myParameter+" more sql ..." 

, entonces no tendrá ninguna vulnerabilidad.

1

Actualmente (la comunidad me corrige si estoy equivocado) no existen vulnerabilidades dentro de la última capa de abstracción de la base de datos de PDO.

Sin embargo, la prueba de sus consultas de conocidos e incógnitas, mientras que la desinfección y filtrado de entrada ayudará a eliminar la posibilidad de una inyección en el caso de un exploit de día cero.

Actualmente uso de una combinación de filtrado de entrada, las expectativas charset, procedimientos almacenados y los requisitos estrictos en sus argumentos antes de cualquier y todas las consultas creadas dinámicamente

Cuestiones relacionadas