一尘不染

避免在Java中进行SQL注入

sql

我是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注入?

谢谢


阅读 279

收藏
2021-03-08

共1个答案

一尘不染

是的,你可以做到这一点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();
2021-03-08