尝试开始使用JDBC(使用Jetty MysqL).我不确定如何在sql语句中转义用户提供的参数.例:
String username = getDangerousValueFromUser(); Statement stmt = conn.createStatement(); stmt.execute("some statement where username = '" + username + "'"));
在使用声明之前,我们如何逃避“用户名”?
解决方法
使用
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.
另见
> does-using-preparedstatement-mean-there-will-not-be-any-sql-injection