12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-11-28 13:27:01
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
代码示例:publicclassJDBCDemo3{publicstaticvoiddemo3_1(){booleanflag=login("aaa'OR'","1651561");//若已知用户名,用这种方式便可不用知道密码就可登陆成功if(fla
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
代码示例:
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注入漏洞登陆用户成功。
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19