`

JAVA WEB 登陆数据比对问题!

阅读更多
    昨天编写了个网页登陆简单的实例,原本SQL语句为select * from info_test where name='n'and

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) 程序没有识别对,不知何解?
分享到:
评论
1 楼 cooltester 2009-09-11  
自己解决了问题,赞一个,哈哈!沙发自己坐了
自行解决了问题:原因是数据库中的pass为char型,数据长度不够的时候,会自动加空格填平,这就导致了String读出密码,但是有空格的,所以出现了pw.equals(p)为false的情况;解决方法就是在
String pw=rs.getString(3);这一句上面加上.trim();去掉后面的空格;
即:String pw=rs.getString(3).trim();
好了,已经标好了颜色,请大家在编辑程序的时候注意一下!^0^

相关推荐

Global site tag (gtag.js) - Google Analytics