SQL注入

public class Login {
    public boolean login(String card,String password){
        
        boolean rtn= false;
        
        try {

            //1、加载驱动:加载数据库提供的驱动类
            Class.forName("oracle.jdbc.driver.OracleDriver");
            
            //2、获取数据库连接,通过java的驱动管理器
            Connection conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:orcl ",
                    "test01", "131281huazioo");
            
            //3、获得操作数据库的声明
            Statement st=conn.createStatement();
            //sql语句
            String sql= "select * from bankcard where card='"+card+"'and password='"+password+"'";
            //执行sql语句
            ResultSet rs=st.executeQuery(sql);
            
            rtn=rs.next();
            rs.close();
            st.close();
            conn.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        return rtn;
    }
}

以上代码会出现SQL注入

如:

public class Testlogin {

@Test
public void test() {
Login a=new Login();

if(a.login("123123123' or 1='1", "12312312313' or 1='1")){                    //无论输入什么数据只要加or 1=1就可以成功
    System.out.println("成功!");
}

}

}

 or 1=1 加到where条件后保证了条件永远为真,相当于没加条件。

原SQL语句改为:select * from bankcard where card='123132' or 1=1;

1 public void test() {
2         Login a=new Login();
3         if(a.login("108'--", "12312312313")){
4             System.out.println("成功!");
5         }
6     }

加入--将后面的条件注释掉,在Oracle中--表示注释,这样就可以使账号满足的条件下,使密码失效。

原文地址:https://www.cnblogs.com/jingzhenhua/p/5984336.html