数据库 
首页 > 数据库 > 浏览文章

SQL注入漏洞过程实例及解决方案

(编辑:jimmy 日期: 2024/11/16 浏览:3 次 )

代码示例:

public class JDBCDemo3 {
  public static void demo3_1(){
    boolean flag=login("aaa' OR ' ","1651561");  //若已知用户名,用这种方式便可不用知道密码就可登陆成功
    if (flag){
      System.out.println("登陆成功");
    }else{
      System.out.println("登陆失败");
    }

  }
  public static boolean login(String username,String password){
    Connection conn=null;
    Statement stat=null;
    ResultSet rs=null;
    boolean flag=false;
    try {
      conn=JDBCUtils.getConnection();
      String sql="SELECT * FROM user WHERE username='"+username+"'AND password='"+password+"'"; //此处是SQL注入漏洞的关键,因为是字符串的拼接,会使查询语句变为:SELECT * FROM user WHERE username='aaa' OR '' AND password='1651561',此查询语句是可得到结果集的,便出现此漏洞
      stat=conn.createStatement();
      rs=stat.executeQuery(sql);
      if(rs.next()){
        flag=true;
      }else{
        flag=false;
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return flag;
  }

解决方法,使用PrepareStatment:

public static void demo3_1(){
    boolean flag=login1("aaa' OR ' ","1651561");
    if (flag){
      System.out.println("登陆成功");
    }else{
      System.out.println("登陆失败");
    }

  }
  public static boolean login1(String username,String password){
    Connection conn=null;
    PreparedStatement pstat=null;
    ResultSet rs=null;
    boolean flag=false;

    try {
      conn=JDBCUtils.getConnection();
      String sql="SELECT * FROM user WHERE username="; //使用?代替参数,预先设置好sql格式,就算在输入sql关键字也不会被sql识别
      pstat=conn.prepareStatement(sql);
      pstat.setString(1,username); //设置问号的值
      pstat.setString(2,password);
      rs=pstat.executeQuery();
      if(rs.next()){
        flag=true;
      }else{
        flag=false;
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return flag;
  }
}

使用以上解决办法就无法通过SQL注入漏洞登陆用户成功。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:MySQL主从配置学习笔记
下一篇:mysql全量备份和快速恢复的方法整理
一句话新闻
微软与英特尔等合作伙伴联合定义“AI PC”:键盘需配有Copilot物理按键
几个月来,英特尔、微软、AMD和其它厂商都在共同推动“AI PC”的想法,朝着更多的AI功能迈进。在近日,英特尔在台北举行的开发者活动中,也宣布了关于AI PC加速计划、新的PC开发者计划和独立硬件供应商计划。
在此次发布会上,英特尔还发布了全新的全新的酷睿Ultra Meteor Lake NUC开发套件,以及联合微软等合作伙伴联合定义“AI PC”的定义标准。
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 站点导航 SiteMap