JDBC-SQL注入案例:模拟用户登录

需求

承接上文JDBC-SQL注入简介. 在大概了解了什么是SQL注入之后,接下来使用test_02数据库表模拟用户登录操作.

提示用户输入用户名和密码,使用Statement字符串拼接的方式实现用户登录

步骤

JDBC-编写工具类
  • 调用JDBCUtils工具类获取连接
  • 调用JDBCUtils工具类获取语句执行平台(即Statement对象)
  • 提示用户输入用户名和密码
  • 执行字符串接接后的sql语句
  • 判断是否登录成功
  • 调用JDBCUtils工具类关闭对象

代码示例

public class LoginTest01 {

    public static void main(String[] args) throws SQLException {

        // 1.获取连接
        Connection conn = JDBCUtils.getConnection();
        // 2.获取执行平台,即Statement对象
        Statement sqlExecute = JDBCUtils.createStatement(conn);
        // 3.提示用户输入用户名和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名: ");
        String user = sc.nextLine();
        System.out.println("请输入密码: ");
        String pass = sc.nextLine();
        // 4.执行字符串拼接后的sql语句
        String sql = "select * from test_02 where name = '" + user + "' and password = '" + pass + "';";
        System.out.println(sql);//查看执行的sql语句
        ResultSet resultSet = sqlExecute.executeQuery(sql);
        // 5.判断是否登录成功
        if(resultSet.next()){
            System.out.println("登录成功,欢迎:" + user);
        }else{
            System.out.println("登录失败!");
        }
        // 5.关闭对象
        JDBCUtils.close(conn,sqlExecute,resultSet);
    }
}

运行结果一(正常输入)

image.png

运行结果二(SQL注入)

image.png

如上, 我们使用一种比较"巧妙"的方式就骗过了登录验证
出现这种问题的原因是使用了字符串拼接. 所以理论上如果我们不使用字符串拼接,应该就可以防止SQL注入. 即prepareStatement

阅读 188

推荐阅读

1.领养代替买卖2.关于JAVA的技能点3.微博@-納是大大大大大太阳啊-

0 人关注
62 篇文章
专栏主页