数据库注入攻击
package myJDBC;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
/**
* 数据库注入攻击
* 利用数据库的语法缺陷进行攻击,使输入的数据成为SQL语句的一部分进行SQL语句拼接,然后执行
*
*/
public class myjdbc03 {
public static void main(String[] args)throws Exception{
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/tamyda?serverTimezone=GMT%2B8";
String user="root";
String password="mysql";
Connection con=DriverManager.getConnection(url,user,password);
Statement stat=con.createStatement();
Scanner sc=new Scanner(System.in);
String users=sc.next();
String passwords=sc.next();
//使用字符串拼接
String st="select * from users where username='"+users+"' and password='"+passwords+"'";
System.out.println(st);
ResultSet rs=stat.executeQuery(st);
while(rs.next()) {
System.out.println(rs.getString("username")+" "+rs.getString("password"));
}
rs.close();
stat.close();
con.close();
}
}
执行输入样例
a
1'or'1=1
select * from users where username='a' and password='1'or'1=1'
a 1
b 2
在输入中,可以看出拼接的SQL语句;在数据库执行的是重新拼接的SQL语句 这时匹配到的是数据库该表单的所有数据记录。