SQL注入漏洞过程的示例分析
这篇文章将为大家详细讲解有关SQL注入漏洞过程的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
代码示例:
publicclassJDBCDemo3{publicstaticvoiddemo3_1(){booleanflag=login("aaa'OR'","1651561");//若已知用户名,用这种方式便可不用知道密码就可登陆成功if(flag){System.out.println("登陆成功");}else{System.out.println("登陆失败");}}publicstaticbooleanlogin(Stringusername,Stringpassword){Connectionconn=null;Statementstat=null;ResultSetrs=null;booleanflag=false;try{conn=JDBCUtils.getConnection();Stringsql="SELECT*FROMuserWHEREusername='"+username+"'ANDpassword='"+password+"'";//此处是SQL注入漏洞的关键,因为是字符串的拼接,会使查询语句变为:SELECT*FROMuserWHEREusername='aaa'OR''ANDpassword='1651561',此查询语句是可得到结果集的,便出现此漏洞stat=conn.createStatement();rs=stat.executeQuery(sql);if(rs.next()){flag=true;}else{flag=false;}}catch(SQLExceptione){e.printStackTrace();}returnflag;}
解决方法,使用PrepareStatment:
publicstaticvoiddemo3_1(){booleanflag=login1("aaa'OR'","1651561");if(flag){System.out.println("登陆成功");}else{System.out.println("登陆失败");}}publicstaticbooleanlogin1(Stringusername,Stringpassword){Connectionconn=null;PreparedStatementpstat=null;ResultSetrs=null;booleanflag=false;try{conn=JDBCUtils.getConnection();Stringsql="SELECT*FROMuserWHEREusername=?ANDpassword=?";//使用?代替参数,预先设置好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(SQLExceptione){e.printStackTrace();}returnflag;}}
使用以上解决办法就无法通过SQL注入漏洞登陆用户成功。
关于“SQL注入漏洞过程的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。