SQL注入

Posted 蕤霁云若

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; public void test() {
        Login a=new Login();
        if(a.login("108‘--", "12312312313")){
             System.out.println("成功!");
         }
     }

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

  

以上是关于SQL注入的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis如何防止SQL注入

MyBatis怎么防止SQL注入

mybatis以及预编译如何防止SQL注入

手机只需发条消息即可开始大规模SQL注入攻击

4个单词,谷歌返回16个SQL注入漏洞

基于约束的SQL攻击