浏览 1645 次
锁定老帖子 主题:JAVA WEB 登陆数据比对问题!
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-11
最后修改:2009-09-24
pass='p'其中,name,pass 为数据库中的字段;但是这种构造方法不行,有注入漏洞,因此想到先从数据库中核对 name项,然后再比对密码项; 那么流程如下: 1、如果在库中检索不到n值,就输出“不存在该用户”; 2、如果匹配到n值,则继续匹配p值; 3、如果有p值就输出“正确登陆”;如果没有,则输出“密码错误”; 出现问题是:如果匹配到n值,但不管P值有没有,一概输出“密码错误”;请大家帮我看看! ---------------------------------------------------------------------- 自行解决了问题:原因是数据库中的pass为char型,数据长度不够的时候,会自动加空格填平,这就导致了String读出密码,但是有空格的,所以出现了pw.equals(p)为false的情况;解决方法就是在 String pw=rs.getString(3);这一句上面加上.trim();去掉后面的空格; 即:String pw=rs.getString(3).trim(); 好了,已经标好了颜色,请大家在编辑程序的时候注意一下!^0^ ---------------------------------------------------------------start Connection conn=null;//初始化 Statement st=null; //初始化 try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String url="jdbc:sqlserver://localhost:1433; DatabaseName=data_test"; String user="sa"; String password="mima"; conn=DriverManager.getConnection(url, user, password); System.out.println("^0^连接数据库成功!"); }catch (Exception e) { System.out.println("- -连接数据库失败!"); System.out.println(e.getMessage()); } String n=request.getParameter("name");//得到提交页的用户值; String p=request.getParameter("pass");//得到提交页的密码值; st=conn.createStatement();//创造执行实例 String StrSQL="select * from info_test where name='"+n+"'"; ResultSet rs=st.executeQuery(StrSQL);//执行SQL语句; if(rs.next()) {//如果用户存在 String pw=rs.getString(3);//将库中第3列的数据取出来,即取出库中密码; out.println(pw); //在浏览器中输出密码; if(pw.equals(p))//判断库中密码【pw】是否与提交页密码【p】相等; { out.println("正确登陆");//如果相等,则输出“正确登陆”; st.close();//实例关闭; conn.close();//数据库连接关闭; out.println("数据库关闭成功!!");//输出“数据库关闭”; } else { out.println("密码错误"); st.close(); conn.close(); System.out.println("数据库关闭成功!!"); } } else { out.println("不存在该用户"); st.close(); conn.close(); System.out.println("数据库关闭成功!!"); } ---------------------------------end 1.如果用户名不正确,那么返回“不存在该用户”,没有问题; 2.如果用户名正确,密码不管正确与否,都返回“密码错误”!! 看来 pw.equals(p) 程序没有识别对,不知何解? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-09-11
自己解决了问题,赞一个,哈哈!沙发自己坐了
自行解决了问题:原因是数据库中的pass为char型,数据长度不够的时候,会自动加空格填平,这就导致了String读出密码,但是有空格的,所以出现了pw.equals(p)为false的情况;解决方法就是在 String pw=rs.getString(3);这一句上面加上.trim();去掉后面的空格; 即:String pw=rs.getString(3).trim(); 好了,已经标好了颜色,请大家在编辑程序的时候注意一下!^0^ |
|
返回顶楼 | |