2011-01-05 35 views
10

He utilizado hibernate para interactuar con mi base de datos, ahora quería proteger mi capa de base de datos contra la inyección de SQL, así que investigué y descubrí que mis consultas debían parametrizarse, por lo que significa si acabo estructuro mis consultas HQL como:Prevención contra inyección de SQL en Hibernate

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?") 
.setString(0, name) 
.list(); 

Entonces es parametrizado y protegido de la inyección de SQL, o hay algo más, que tengo que hacer ...

otra cosa fue mencionado - "Escapar siempre de sus datos "¿Cómo se puede lograr eso?

Respuesta

4

No sé setString() pero si es lo mismo que setParameter() entonces sí, es suficiente para evitar que se inyecte sql.

actualización

Por escapando de datos, significa que usted tiene que asegurarse de que no está almacenando valores peligrosos en la base de datos.

Un ejemplo rápido es, por ejemplo, si se pasa en el argumento

String name = "<script>alert('Hello');</script>"; 
//insert this name into Mother, and then when you load it from the database, it will be displayed  

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?") 
.setString(0, name) 
.list(); 

a la consulta, entonces la próxima vez que cargue esto desde la base de datos, y hacerlo en su navegador web, se ejecutará la secuencia de comandos .
Debe asegurarse de que su marco escapa a todos los caracteres ilegales, es decir: cambiando < a &lt; antes de insertarlo en la base de datos.
Si su marco no hace esto, tiene que hacerlo manualmente. Hay toneladas de bibliotecas por ahí que escapan correctamente el código para usted. Eche un vistazo a this question por ejemplo y las respuestas allí.

+0

Miré en el enlace que propones ... la gente está sugiriendo soluciones para escapar de html. ¿Se necesita otro tipo de escape? –

+3

-1. Escapar los datos de entrada no es un buen enfoque para la prevención de XSS. La mejor manera es escaparse de los datos que no son de confianza cuando los va a insertar en un contexto peligroso (como la página HTML), teniendo en cuenta las reglas de ese contexto. Consulte también [Hoja de referencia de prevención de XWS de OWASP] (http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet). También la pregunta era sobre inyección de SQL, no sobre XSS. – axtavt

+0

@axtavt Si lees mi respuesta y comento dentro del código, verás que menciono que los datos deben escaparse al insertarlos en la tabla Madre. –

Cuestiones relacionadas