SQL注入演示

  SQL注入演示

 创建一个简易的登录系统/**

  tb_user  用户表

 

* 用户登录系统(需在数据库中创建tb_user表 )
     */
    @Test
    public void testUserLogin() throws Exception{
        // 1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2.获取连接
        String url = "jdbc:mysql://127.0.0.1:3306/db_0915?characterEncoding=utf8&useSSL=true";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url,username,password);
        //  接收用户名和密码
        //原本登录方式  String name = "zhangsan";  //   用户输入用户名
        //         String pwd = "123";         //   用户输入密码
     //使用SQL注入
     String name = "iaojsfona";  // 用户名乱写
     String pwd = "' or '1' = '1 ";  //最简单的sql注入  

        String sql = "select * from tb_user where username = '" + name +
                                        "' and password = '" + pwd + "'";

        // 获取stmt对象
        Statement stmt = conn.createStatement();

        // 执行sql语句
        ResultSet rs =  stmt.executeQuery(sql);

        // 判断登录成功
        if(rs.next()){
            System.out.println("登录成功~");
        }else{
            System.out.println("登录失败~");
        }
    }

 

 

 

 

   原理:

    ·String sql = "select * from tb_user where username = '" + name + "' and password = '" + pwd + "'";

    把  String pwd = "' or '1' = '1 ";   带入进去

    String sql = "select * from tb_user where username = '" + name + "' and password = '" + "' or '1' = '1 " + "'"

    SQL语句变为了--      select * from tb_user where username = 'asdgadgadg' and password = '' or '1' = '1'      恒成立的

    即可被系统判定为 真  -->  登录成功

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-09-16 23:37  风陵南  阅读(66)  评论(0)    收藏  举报