2011-02-10 6 views
8

Intentando comenzar con JDBC (usando Jetty + MySQL). No estoy seguro de cómo escapar de los parámetros proporcionados por el usuario en una declaración de SQL. Ejemplo:¿Cómo escapar de los parámetros proporcionados por el usuario con una consulta SQL?

String username = getDangerousValueFromUser(); 
Statement stmt = conn.createStatement(); 
stmt.execute("some statement where username = '" + username + "'")); 

¿Cómo escapamos de "nombre de usuario" antes de usarlo con una instrucción?

Respuesta

15

Use Prepared statement.

por ejemplo:

con.prepareStatement("update Orders set pname = ? where Prod_Id = ?"); 
pstmt.setInt(2, 100); 
pstmt.setString(1, "Bob"); 
pstmt.executeUpdate(); 

Se evitará la inyección de SQL en bruto

Si quieres escapar cadena SQL a continuación, comprobar si hay StringEscapeUtils.escapeSql(). Tenga en cuenta que este método fue deprecated in Commons Lang 3.

también vemos

+4

+1. No puede haber otra respuesta. – Thilo

+6

@Thilo: ¿Por qué no? OP preguntó específicamente cómo escapar del parámetro de cadena, no cómo evitar la inyección de SQL. Esta respuesta ni siquiera responde a la pregunta de OP, responde lo que OP supuestamente quiere. Quiero saber lo mismo, y esta respuesta no me ayudó. – lvella

+2

@Ivella: "cómo escapar" es un típico [problema XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Respondiendo a la pregunta * literalmente * no hace nadie un servicio. –

Cuestiones relacionadas