我是JavaEE的新手,并试图通过检查数据库来学习制作一个简单的登录页面。这是代码示例:
ResultSet result=null; Statement s = (Statement) con.createStatement(); result=s.executeQuery("select username from Table where ID="+id and " password="+password);
它应该容易受到SQL注入的侵害吧?我可以通过在ASP.NET中使用参数化查询来做到这一点,如下所示:
SqlConnection con = new SqlConnection(); SqlCommand cmd=new SqlCommand("select username from Table where ID=@id and password=@password",con); cmd.Parameters.AddWithValue("@id", id); cmd.Parameters.AddWithValue("@password", password);
有没有办法像这样在Java中使用参数化查询?谁能以参数化形式使用该查询来避免SQL注入?
谢谢
是的,你可以做到这一点PreparedStatement;例如:
PreparedStatement
PreparedStatement preparedStatement = con.PreparedStatement( "SELECT * FROM MY_TABLE WHERE condition1 = ? AND condition2 = ?"); preparedStatement.setString(1,condition1_value); preparedStatement.setString(2,condition2_value); ResultSet rs = preparedStatement.executeQuery();