解决登录页面SQL注入问题

1.新建一个java项目:

(1) 在项目中建一个properties文件

解决登录页面SQL注入问题_第1张图片

#配置连接数据库信息(动态生效) 键值对的形式 写数据库连接信息
 driverclass= com.mysql.jdbc.Driver
 url=jdbc:mysql://localhost:3306/db2019
 username=root
 password=sa123456

(2)新建一个JDBCUtil 类

 package com.*;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
 /*
* jdbc连接管理工具类
* Statement对象进行创建对象
*     在项目中新建一个properties文件,进行相关配置信息的存储,方便程序后期配置信息   的变更(properties文件不会被编译)
*/
public class JdbcUtil {

static Connection conn =null;  //连接数据库
static Statement state =null;  //用于处理一条静态的sql语句并且进行相应的处理
static 	ResultSet rs =null;

static String driverclass = null;
static String url = null;
static String username = null;
static String password = null;
static {
    //在静态块里面的内容会在程序找到函数的主入口之前提前读取,因此数据库的密码和用户名以及驱动之类的东西会提前预备好  
    Properties proper=new Properties();
    try {
        FileInputStream in =new FileInputStream("src/config.properties");
        proper.load(in);
        driverclass=proper.getProperty("driverclass");
        url=proper.getProperty("url");
        username=proper.getProperty("username");
        password=proper.getProperty("password");
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("此处有1异常!!!");
    }
}

public static Connection getConn(){
	Connection conn = null;
	try {
		conn = DriverManager.getConnection(url, username, password);
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return conn;
}
}

(3)写一个登录测试类

 package com.*;

import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

import com.cckj.jdbcs.JdbcUtil;
import com.mysql.jdbc.Connection;
/*
* 演示登录过程中,存在的sql注入问题
*/
public class Register0 {

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.println("请输入用户名");
    String username = sc.nextLine();

    System.out.println("请输入密码");
    String password = sc.nextLine();

    Connection conn = null;
    Statement st = null;
    ResultSet rs = null;
    try{
        conn = (Connection) JdbcUtil.getConn();
        st = conn.createStatement();
        String sql = "select * from student where name='"+username+"' and password='"+password+"'";
        rs = st.executeQuery(sql);

        if(rs.next()){  //rs中有数据
            System.out.println("登录成功");
        }else{  // 用户名密码错误,没有查到数据
            System.out.println("登录失败,用户名或密码有误");
        }
    }catch(Exception e){
        e.printStackTrace();
    }finally{
          JdbcUtil.close(conn,st,rs);
    }
}

}

(4)控制台输入万能密码测试效果
解决登录页面SQL注入问题_第2张图片
!!! 防止sql注入用 PreparedStatement 执行sql语句
!!! 或着 前端识别校验

你可能感兴趣的:(安全,mysql,sql)