在数据库中生成 一个用户表 有用户名 username 和密码password 字段 并插入两组数据
正常的sql查询结果
非正常查询途径返回的结果
下面用一段java代码 演示一下用户登录时的sql注入问题
package demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Scanner; import com.mysql.jdbc.Driver; /* * Java程序实现用户登录,用户名和密码,数据库检查 * 演示被别人攻击 */ public class JDBCDemo2 { public static void main(String[] args) throws ClassNotFoundException, SQLException { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接 String url="jdbc:mysql://localhost:3306/mybase"; String username="root"; String password="123456"; Connection conn=DriverManager.getConnection(url,username,password); //3.创建方法执行对象 Statement stat=conn.createStatement(); Scanner sc=new Scanner(System.in); System.out.print("请输入用户名:"); String user=sc.nextLine(); System.out.print("请输入密码:"); String pwd=sc.nextLine(); //执行SQL语句,数据表,查询用户名和密码,如果存在,登陆成功,不存在登陆失败 String sql="select * from users where username='"+user+"' and password='"+pwd+"'"; System.out.println(sql); ResultSet rs=stat.executeQuery(sql); while(rs.next()){ System.out.println(rs.getString("username")+" "+rs.getString("password")); } rs.close(); stat.close(); conn.close(); } }
控制台输入 输出
刚刚控制台输入的用户名是存在的
下面输入瞎写的用户名和密码同样可以得到所有用户名和对应的密码,此谓sql的注入攻击