如何使用SQL查询转义用户提供的参数?

时间:2011-02-10 06:21:42

标签: java security jdbc sql-injection

尝试开始使用JDBC(使用Jetty + MySQL)。我不确定如何在SQL语句中转义用户提供的参数。例如:

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

在使用声明之前,我们如何逃避“用户名”?

1 个答案:

答案 0 :(得分:15)

使用Prepared statement

例如:

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

它将阻止原始SQL注入

如果要转义sql字符串,请检查StringEscapeUtils.escapeSql()。请注意,此方法为deprecated in Commons Lang 3

另见