标签:Map集合 获取 用户登陆 ESS mysq enc stat finally 参与
导致SQL注入的根本原因是什么?
模拟用户登陆注册,演示sql注入
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
* 存在sql注入问题隐患 例如输入: ‘fdsa‘ fdsa‘ or‘1‘=‘1 就会登录成功,因为 or一边成立就成立,1恒等于1
* 导致SQL注入的根本原因是什么?
* 用户输入的信息中含有sql语句的关键字,并且用户所输入的信息参与了sql语句的编译过程,导致sql语句的原意被扭曲。
*/
public class Main {
public static void main(String[] args) throws SQLException {
//掉用initUI()获取用户名密码
Map<String,String> userLoginInfo=initUI();
//调用register()方法。
//boolean registerSuccess=register(userLoginInfo);
//输出结果
//System.out.println(registerSuccess?"注册成功":"注册失败");
//调用logIn()方法。
boolean loginSuccess=login(userLoginInfo);
System.out.println(loginSuccess?"登陆成功":"密码错误");
}
/**
* 用户注册
* @param userLoginInfo 用户登录信息
* @return true成功, false失败
*/
private static boolean register(Map<String, String> userLoginInfo) {
//创建连接对象
Connection connection=null;
Statement statement=null;
int count=0;
try {
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获取连接
connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
"root","123456");
//获取数据库操作对象
statement=connection.createStatement();
//执行SQL语句
count=statement.executeUpdate("insert into t_user(loginName,loginPwd,realName)values(‘"+userLoginInfo.get("loginName")+"‘,‘"+userLoginInfo.get("loginPwd")+"‘,‘ ‘) ");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}finally {
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
if(count==1){
return true;
}
return false;
}
/**
* 用户登录
* @param userLoginInfo 用户信息
* @return 成功true 失败fslse
*/
private static boolean login(Map<String, String> userLoginInfo) throws SQLException {
//标识
boolean flag=false;
//获取用户信息
String loginName=userLoginInfo.get("loginName");
String loginPwd=userLoginInfo.get("loginPwd");
//创建连接对象
Connection connection=null;
Statement statement=null;
ResultSet resultSet=null;
try {
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获取连接
connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
"root","123456");
//获取数据库连接对象
statement=connection.createStatement();
//执行SQL语句
resultSet=statement.executeQuery("select * from t_user where loginName=‘"+loginName+"‘and loginPwd=‘"+loginPwd+"‘");
//处理查询结果集
if(resultSet.next()){
flag=true;
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}finally {
if(resultSet!=null){
resultSet.close();
}
if(statement!=null){
statement.close();
}
if (connection!=null){
connection.close();
}
}
return flag;
}
/**
* 初始化用户界面
* @return 返回用户登录信息
*/
private static Map<String, String> initUI() {
//创建用户信息接收对象
Scanner scanner=new Scanner(System.in);
//获取用户名
System.out.println("请输入您的用户名:");
String userName=scanner.nextLine();
//获取密码
System.out.println("请输入您的密码:");
String pwd=scanner.nextLine();
//创建一个Map集合用来存放用户输入得用户名和密码
Map<String,String> userLoginInfo=new HashMap<String,String>();
//存入Map集合
userLoginInfo.put("loginName",userName);
userLoginInfo.put("loginPwd",pwd);
//返回该集合
return userLoginInfo;
}
}
标签:Map集合 获取 用户登陆 ESS mysq enc stat finally 参与
原文地址:https://www.cnblogs.com/szqengr/p/14669632.html