zoukankan      html  css  js  c++  java
  • JDBC连接mysql数据库操作

    一.创建所需对象,并进行初始化

    Connection connection=null;
    Statement  statement=null;
    PreparedStatement pst;
    ResultSet  rs=null;
    

    二.加载mysql驱动

    Class.forName("com.mysql.jdbc.Driver");
    

    三.创建链接(url为数据库连接,root帐号,pwd密码)

    connection=DriverManager.getConnection(url,root,pwd);
    

    四.创建statement一般创建为预编形的即PreparedStatement,如果使用Statement会引起sql注入攻击,首先是一般的Statement:

    statement=connection.createStatement();
    String sql="select * from user where username='"+username+"'"+"and password='"+password+"'";
    rs=statement.executeQuery(sql);
      if(rs.next()){
             response.getWriter().print("connection is ok");
    	 }
      else {
    	 response.getWriter().print("用户名密码错误");
    	}	
    

    五.测试:1.输入正确帐号="张三",密码=1234;获得效果

     

    2.输入错误帐号=12312,密码=1231234' or '1'='1;获得效果,并将sql语句打印出来

    3.总结:这句sql相当与( select * from user)一般的stament会因为sql拼接的问题,可能会被恶意攻击,攻击者可以无需帐号密码即可登录,可甚至可以删除你的数据库。

    六.使用PreparedStatement防止sql注入,增强安全性,而且他比statement的效率更高,因为它是预先编译好的sql语句,使用?来代表参数,通过pst.setString方法将值传入,

    第一个参数代表是第几个?的位置(从1开始),第二个参数代表是参数值。

    String sql="select * from user where username=? and password=?";
            pst=connection.prepareStatement(sql);
            pst.setString(1, username);
            pst.setString(2, password);
            System.out.println(pst.toString());
            rs=pst.executeQuery();
            if(rs.next())
            {
                response.getWriter().print("connection is ok");
            }
            else {
                response.getWriter().print("用户名密码错误");
            }        

    七.测试:输入错误帐号=12312,密码=1231234' or '1'='1(sql注入方法能否正常登录)

    八.总结,为什么能防止sql,看打印出来的sql语句便可以知道,预编译的语句在执行时会自动转义一些字符,从而防止sql注入

  • 相关阅读:
    学了这么多年技术,为什么水平还是一般般?
    你能不用计算机来计算S=a+(a+1)+(a+2) + ...... + b的解的数目吗?
    迟来的2013年总结
    如何快速查找IP归属地
    Shiro 权限标签
    Shiro 权限注解
    Shiro 授权
    shiro 身份验证
    Kaptcha
    FastJson
  • 原文地址:https://www.cnblogs.com/hckblogs/p/7701184.html
Copyright © 2011-2022 走看看