zoukankan      html  css  js  c++  java
  • mysql的安全漏洞的一种现象,就是利用转义字符把 ' ' 化没了,然后true 起作用啦

    mysql的安全漏洞的一种现象,就是利用转义字符把 ' ' 化没了,然后true 起作用啦

    所以~ select * from stu where StuName = true~~~~~

    代码举例:

    //登录系统
    System.out.println("请输入用户名:");
    Scanner scanner = new Scanner(System.in);
    String name = scanner.nextLine();
    System.out.println("请输入密码:");
    String password = scanner.nextLine();
    //拼接成sql语句
    String sql = String.format("select * from stu where StuName='%s' and LoginPwd='%s'",name,password);
    //连接服务器验证密码是否正确
    Connection connection = JDBCUtil.GetConnection(); //自定义的JDBCUtil类封装了连接sql的驱动器,以及返回一个连接到自己的服务器Connection活动对象
    Statement statement = null;
    statement = connection.createStatement();
    //执行sql语句
    ResultSet resultSet = statement.executeQuery(sql);
    if(resultSet.next()){
    System.out.println("登录成功");
    System.out.println(sql);
    }else{
    System.out.println("登录失败!请重试");
    }

    解决:使用预编译 PreparedStatement,创建参数化的sql语句

    例如:String sql="select * from stu where StuName = ? and LoginPwd = ?";    //设置参数化sql语句,变量的值暂时用?代替

    PreparedStatement preparement = connection.preparedStatement(sql);

    preparement.setString(1, "易烊千玺");  //设置参数

    preparement.setString(2,"123445");

     

    代码示例:

       //登录系统
    System.out.println("请输入用户名:");
    Scanner scanner = new Scanner(System.in);
    String name = scanner.nextLine();
    System.out.println("请输入密码:");
    String password = scanner.nextLine();
    //拼接成sql语句
    // String sql = String.format("select * from stu where StuName='%s' and LoginPwd='%s'",name,password);
    String sql = "select * from stu where StuName=? and LoginPwd=?;";
    //连接服务器验证密码是否正确
    Connection connection = JDBCUtil.GetConnection(); //自定义的JDBCUtil类封装了连接sql的驱动器,以及返回一个连接到自己的服务器Connection活动对象
    // Statement statement = null;
    // statement = connection.createStatement();

    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    //为每一个?赋值,下标从1开始
    preparedStatement.setString(1, name);
    preparedStatement.setString(2,password);
    //执行sql语句
    // ResultSet resultSet = statement.executeQuery(sql);

    ResultSet resultSet = preparedStatement.executeQuery();
    if(resultSet.next()){
    System.out.println("登录成功");
    System.out.println(sql);
    }else{
    System.out.println("登录失败!请重试");
    }
    }


     
  • 相关阅读:
    springboot 2.4.5 redis 配置类+缓存
    华为ensp模拟器 提示40 错误问题
    Nodejs
    Python PermissionError:[Errno 13]权限被拒绝 [winerr 5]
    Window10的linux docker 安装(wsl版本)
    window10的 Linux 子系统ssh配置
    vue3.0中provide和inject实现响应式传值
    正确开启vue3.0调试工具vue-devtools
    vue动态设置组件样式
    element-ui菜单导航的三种递归写法(三)
  • 原文地址:https://www.cnblogs.com/shan333/p/14885063.html
Copyright © 2011-2022 走看看