2011-02-10 2 views
8

Provare a iniziare con JDBC (utilizzando Jetty + MySQL). Non sono sicuro di come sfuggire i parametri forniti dall'utente in un'istruzione SQL. Esempio:Come evitare i parametri forniti dall'utente con una query SQL?

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

Come uscire "nome utente" prima dell'uso con una dichiarazione?

risposta

15

Utilizzare Prepared statement.

ad esempio:

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

Sarà evitare l'iniezione SQL prime

Se si vuole sfuggire stringa SQL quindi controllare per StringEscapeUtils.escapeSql(). Si noti che questo metodo era deprecated in Commons Lang 3.

anche vedere

+4

+1. Non ci può essere altra risposta. – Thilo

+6

@Thilo: perché no? OP ha chiesto in particolare come evitare il parametro stringa, non come impedire l'iniezione SQL. Questa risposta non risponde nemmeno alla domanda dell'OP, risponde a ciò che OP vorrebbe. Voglio sapere la stessa cosa, e questa risposta non mi ha aiutato. – lvella

+2

@Ivella: "how to escape" è un tipico [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Rispondere alla domanda * letteralmente * nessuno fa un servizio. –