• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQL注入漏洞过程实例及解决方案

    代码示例:

    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=? AND password=?"; //使用?代替参数,预先设置好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注入漏洞登陆用户成功。

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

    您可能感兴趣的文章:
    • php中防止SQL注入的最佳解决方法
    • PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
    • T-SQL篇如何防止SQL注入的解决方法
    • ASP+MSSQL2000 数据库被批量注入后的解决方法
    • MySQL Proxy(解决注入的另一思路)
    • MySQL解决SQL注入的另类方法详解
    • SQL注入原理与解决方法代码示例
    • 通过ibatis解决sql注入问题
    • sqlserver 数据库被注入解决方案
    • 实例介绍SQL注入以及如何解决
    上一篇:MySql如何使用not in实现优化
    下一篇:MySQL MyISAM默认存储引擎实现原理
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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