2011-02-10 2 views
8

Попытка начать работу с JDBC (используя Jetty + MySQL). Я не уверен, как избежать пользовательских параметров в SQL-заявлении. Пример:Как избежать пользовательских параметров с помощью SQL-запроса?

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

Как избежать «имени пользователя» перед использованием с заявлением?

ответ

15

Использование Prepared statement.

, например:

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

Это предотвратит RAW SQL-инъекции

Если вы хотите, чтобы избежать SQL-строку, то проверить StringEscapeUtils.escapeSql(). Обратите внимание, что этот метод был deprecated in Commons Lang 3.

Смотрите также

+4

+1. Другого ответа не может быть. – Thilo

+6

@ Тило: Почему бы и нет? OP специально спросил, как избежать параметра строки, а не как предотвратить SQL-инъекцию. Этот ответ даже не затрагивает вопрос ОП, он отвечает тем, что, по-видимому, хочет ОП. Я хочу знать одно и то же, и этот ответ мне не помог. – lvella

+2

@ Ивелла: «как избежать» - типичная [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Отвечая на вопрос * буквально *, никто не обслуживает. –

Смежные вопросы