【sql注入】
通过sql语句的漏洞,OR方法进行注入。
例:(创建用户表,用户名和密码如下)
CREATE TABLE users(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100),
PASSWORD VARCHAR(100)
);
INSERT INTO users (username,PASSWORD) VALUES ('a','1'),('b','2');
验证登录代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
/*
* Java程序实现用户登录,用户名和密码,数据库检查
* 演示被别人注入攻击
*/
public class JDBCDemo2 {
public static void main(String[] args)throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/day07";
String username = "root";
String password = "root";
Connection con = DriverManager.getConnection(url, username, password);
Statement stat = con.createStatement();
Scanner sc = new Scanner(System.in);
System.out.print("用户名:");
String user = sc.nextLine();
System.out.print("密码:");
String pass = sc.nextLine();
//执行SQL语句,数据表,查询用户名和密码,如果存在,登录成功,不存在登录失败
String sql = "SELECT * FROM users WHERE username='"+user+"' AND PASSWORD='"+pass+"'";
System.out.println("执行的SQL语句::"+sql);
ResultSet rs = stat.executeQuery(sql);
while(rs.next()){
System.out.println("登陆成功!");
System.out.println("您的用户名为:"+rs.getString("username")+" 您的密码为:"+rs.getString("password"));
}
rs.close();
stat.close();
con.close();
}
}
正常登陆:
错误登陆:
进行密码注入:
因为OR后面语句永远为真,所以密码判断永远成功。