IT之道-艾锑知道

您当前位置: 主页 > 资讯动态 > IT知识库 >

IT外包桌面解决方案--SQL注入漏洞过程实例及解决方案


2020-03-30 16:21 作者:艾锑无限 浏览量:
与众不同的服务是因为有心
 
所有艾锑人可能都知道艾锑无限为客户提供三种与客户接触的方式,一种是产品,一种是技术,还有一种是服务,那这三种所谓的方式构建起一个三角形,这种稳固的体系,看起来还不错,但我们细细思考却发现很多企业也都提供这三种方式与客户建立一个长久的关系。
 
那艾锑无限到底与这些企业有什么区别呢?有什么明显的区别,让客户和其他人一看这种服务就明白是艾锑无限的服务,这个世界上独一无二的服务呢,大家都看过3D电影吧,无论后来的技术提升或其他人如何模仿,如何超越,大家首先可能想到的3D电影的代表作是《阿凡达》,是的这就是独一无二,那如何让我们的三种与客户建立联系的方式也能变的立体呢,我们来看怎样把这三种方式赋予生命,让他们与众不同.
 
 
大家可能已发现原来“艾锑服务心”让我们的服务变的立体,开始有了美感,开始赋予了新的生命,而不是之前人们认为的那种“无聊”,没有生趣的服务,这是一种全新的与客户建立联系的方式,与客户产生互动的方式,这是生命与生命的互动,这是灵魂与灵魂间的碰撞,就像我们的每一颗蒲公英种子一样让每一次与人的接触都赋予了生命,而不是人与机器的单调互动,更不是那种看起来死气沉沉的三角形。我们用我们的爱,付出,喜悦转化出我们的诚心,细心,贴心的彼此体验,让更多的三面体不断去聚合,形成一颗璀璨的钻石。
 
4afbfbedab64034f85210104adc379310b551dc0副本
这就这个世界上与众不同的艾锑服务,这就是艾锑无限的现成,这更是艾锑无限的未来。
 
 

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

相关文章

IT外包服务
二维码 关闭