zoukankan      html  css  js  c++  java
  • SQL注入命令优化

    SQL注入命令优化

    优化命令:将Statement 替换成了 PreparedStatment预编译命令对象
    

    image

    image

    未使用预编译对象,会导致sql注入问题. 密码输入啥都可以登录成功

    @Test
        //登录
        public void login() throws SQLException {
            Connection connection = JdbcUtils.getConnection();
            Statement statement = connection.createStatement();
            String name = "'or 1=1 #";
            String password = "asdasdsad";
            ResultSet resultSet = statement.executeQuery("select * from user where name = '"+name+"' and password = '"+password+"'");
            if(resultSet.next()){
                System.out.println("登录成功!!");
            }else{
                System.out.println("登录失败!!!");
            }
        }
    

    使用预编译对象后,解决用户名、密码随便输入都可以的问题

     @Test
        //登录
        public void login() throws SQLException {
            Connection connection = JdbcUtils.getConnection();
            //Statement statement = connection.createStatement();   不再使用Statment 存在sql注入的bug
            PreparedStatement preparedStatement = connection.prepareStatement("select * from user where name = ? and password = ?"); //预编译
            String name = "lisi";
            String password = "123";
            //此时preparedStatement中 占位符还没有存值,因此需要通过方法传入用户输入的值
            preparedStatement.setObject(1,name);
            preparedStatement.setObject(2,password);
            ResultSet resultSet = preparedStatement.executeQuery();
            if(resultSet.next()){
                System.out.println("登录成功!!");
            }else{
                System.out.println("登录失败!!!");
            }
            resultSet.close();
            preparedStatement.close();
            JdbcUtils.close();
        }
    
  • 相关阅读:
    各个数字类型取值范围以及推理
    进制转换原理
    位运算操作符_
    读取文件内容
    java中thread的start()和run()的区别
    二进制的负数转换
    位运算符号
    Hadoop的辉煌还能延续多久?
    Hadoop 新 MapReduce 框架 Yarn 详解
    MapReduce工作原理讲解
  • 原文地址:https://www.cnblogs.com/conglingkaishi/p/15232262.html
Copyright © 2011-2022 走看看