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' 恒成立的
即可被系统判定为 真 --> 登录成功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示