Как избежать пользовательских параметров с помощью SQL-запроса? - PullRequest
8 голосов
/ 10 февраля 2011

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

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

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

1 Ответ

15 голосов
/ 10 февраля 2011

Использование Подготовленный оператор .

например:

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

Это предотвратит инъекцию необработанного SQL

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

См. Также

...