JDBC_用户登录功能界面的的初始化(SQL注入的分析)

该博客讨论了如何在Java中实现用户登录功能时遇到的SQL注入问题。内容详细介绍了SQL注入的危害,即用户输入的非法信息可能导致SQL语句原意被扭曲。示例代码展示了使用字符串直接拼接构造SQL查询的不安全方式,并提出了改进的必要性。
摘要由CSDN通过智能技术生成

#JDBC_用户登录功能界面的的初始化

package com.snailxq.jdbc;

import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/*  1.需求:
      模拟用户的的登录功能
*  2.当前程序存在问题,这种现象被称为SQL注入
*        用户名:wq
        密码:wq' or '1'='1
        登录成功
   3.导致SQL注入的根本原因:
     用户输入的信息中含有SQL语句关键字,并且这些关键字参加SQL语句的编译过程。
     导致了SQL语句的原意被扭曲,达到了SQL注入。

* */

public class JDBCTest06 {
    public static void main(String[] args) {
        //初始化一个界面
        Map<String,String> userLoginInfo = initUI();
        //验证用户名和密码
        boolean loginSuccess = login(userLoginInfo);
        //输出结果
        System.out.println(loginSuccess ? "登录成功":"登录失败");


    }

    /**
     * 用户登录
     * @param userLoginInfo 用户登录信息
     * @return
     */
    private static boolean login(Map<String, String> userLoginInfo) {
        // 打标记
        boolean loginSussess =false;
        //单独定义变量
        String loginName =userLoginInfo.get("loginName");
        String loginPwd =userLoginInfo.get("loginPwd");

        Connection connection =null;
        Statement statement= null;
        ResultSet resultSet = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/everours","root","333");
            //3.获取数据库连接对象
            statement =connection.createStatement();
            //4.执行SQL
            String sql ="select * from t_user where loginName='"+loginName+"'and loginPwd ='"+loginPwd+"'";
            //以上的正好完成了SQL语句的拼接,一下代码的含义是发送SQL语句给DBMS,DBMS进行编译
            //正好用户提供的“非法信息”编译进去。导致的了原SQL原意被扭曲。
            resultSet =statement.executeQuery(sql);
        //5.处理结果集
            if (resultSet.next()){
                loginSussess=true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //6.释放结果集
            if (resultSet !=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }if (statement !=null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }if (connection !=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
       return  loginSussess;
    }

    private static Map<String, String> initUI() {
        Scanner s= new Scanner(System.in);

        System.out.print("用户名:");
        String loginName=s.nextLine();

        System.out.print("密码:");
        String  loginPwd=s.nextLine();

        Map<String,String> userLoginInfo =new HashMap<>();
        userLoginInfo.put("loginName",loginName);
        userLoginInfo.put("loginPwd",loginPwd);

        return userLoginInfo;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值