当前位置:   article > 正文

Java中PreparedStatement执行SQL防止SQL注入实现_preparestatement mysql 怎么防止sql注入

preparestatement mysql 怎么防止sql注入

Java中PreparedStatement执行SQL防止注入实现

1、PreparedStatement是什么?

在我们平常使用JDBC的Statement来进行sql连接的时候遇到SQL注入时,就会直接登录成功,例如:
// 接收用户输入 用户名和密码
        String name = "hfkjsfhskj";
        String pwd = "'' or '1' ='1'";
  • 1
  • 2
  • 3
当用户输入为以上并非我们数据库中正确的账号密码时,也会直接登录成功,这就是SQL注入,那么我们要怎么防止SQL注入呢?,这就要用到我们的PreparedStatement了

2、PreparedStatement的使用

2.1 首先我们和之前连接数据库一样先获取连接,接收用户输入的用户名和密码

//2、获取链接
        String url = "jdbc:mysql://127.0.0.1:3306/db1";
        String username = "root";
        String password = "****";
        Connection conn = DriverManager.getConnection(url, username, password);


        // 接收用户输入 用户名和密码
        String name = "zhangsan";
        String pwd = "123";
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.2 在定义SQL语句中与之前有所区别当中的变量我们需要用?进行替代

//定义sql
        String sql = "select * from tb_user where username = ? and password = ?";
  • 1
  • 2

2.3 之后就是获取PreparedStatement对象以及给?赋值,并执行SQL语句

//获取pstmt对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        // 设置?的值
        pstmt.setString(1,name);
        pstmt.setString(2,pwd);
        // 执行sql
        ResultSet rs = pstmt.executeQuery();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.4 最后我们来看最终的代码

    public void testLogin() throws  Exception{


        //2、获取链接
        String url = "jdbc:mysql://127.0.0.1:3306/db1";
        String username = "root";
        String password = "****";
        Connection conn = DriverManager.getConnection(url, username, password);


        // 接收用户输入 用户名和密码
        String name = "zhangsan";
        String pwd = "123";


        //定义sql
        String sql = "select * from tb_user where username = ? and password = ?";

        //获取pstmt对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        // 设置?的值
        pstmt.setString(1,name);
        pstmt.setString(2,pwd);

        // 执行sql
        ResultSet rs = pstmt.executeQuery();



        // 判断登录是否成功
        if (rs.next()){
            System.out.println("登录成功");
        }else {
            System.out.println("登录失败");
        }


        //7、释放资源
        rs.close();
        pstmt.close();
        conn.close();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

经过以上的步骤我们就可以实现利用PreparedStatement执行SQL来防止SQL注入啦。感谢大家看到这里,如果觉得我写得好的话麻烦大家给我一个
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/617866

推荐阅读
相关标签