服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|

服务器之家 - 数据库 - Mysql - SQL注入漏洞过程实例及解决方案

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

2021-01-11 23:13shouyaya Mysql

这篇文章主要介绍了SQL注入漏洞过程实例及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

代码示例:

?
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
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:

?
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
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注入漏洞登陆用户成功。

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

原文链接:https://www.cnblogs.com/shouyaya/p/12322412.html

延伸 · 阅读

精彩推荐
  • Mysqlmysql oracle和sqlserver分页查询实例解析

    mysql oracle和sqlserver分页查询实例解析

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴到脚本之家平台供大家参考 ...

    动力节点3312020-08-15
  • Mysql阿里云Centos 7.5安装Mysql的教程

    阿里云Centos 7.5安装Mysql的教程

    这篇文章主要介绍了阿里云Centos 7.5安装Mysql的教程,需要的朋友可以参考下...

    MYSQL教程网2712020-08-03
  • MysqlMySQL问答系列之如何避免ibdata1文件大小暴涨

    MySQL问答系列之如何避免ibdata1文件大小暴涨

    MySql innodb如果是共享表空间,ibdata1文件会越来越大,所以下面这篇文章主要给大家介绍了关于MySQL问答系列之如何避免ibdata1文件大小暴涨的相关资料,文中...

    叶金荣5652019-06-26
  • MysqlLinux下卸载MySQL数据库

    Linux下卸载MySQL数据库

    如何在Linux平台卸载MySQL呢?这篇文章主要介绍了Linux下卸载MySQL数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    潇湘隐者5622020-07-30
  • Mysqlmysql5.7.17 zip 解压安装详细过程

    mysql5.7.17 zip 解压安装详细过程

    这篇文章主要为大家详细介绍了mysql5.7.17 zip 解压安装详细过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    xiaonizi30072762020-07-16
  • MysqlMysql树形递归查询的实现方法

    Mysql树形递归查询的实现方法

    这篇文章主要给大家介绍了关于Mysql树形递归查询的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    javahih3012019-06-06
  • Mysql10个MySQL性能调优的方法

    10个MySQL性能调优的方法

    本文介绍了10个MySQL性能调优的方法,每个方法的讲解都很细致,非常实用,,需要的朋友可以参考下 ...

    小_米1762020-05-15
  • Mysql远程连接mysql 授权方法详解

    远程连接mysql 授权方法详解

    今在服务器上有mysql数据库,远程访问,不想公布root账户,所以,创建了demo账户,允许demo账户在任何地方都能访问mysql数据库中shandong库,接下来为您详细...

    MYSQL教程网3942019-12-10