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值有没有,一概输出“密码错误”;请大家帮我看看!
----------------------------------------------------------------------
[color=orange]自行解决了问题:原因是数据库中的pass为char型,数据长度不够的时候,会自动加空格填平,这就导致了String读出密码,但是有空格的,所以出现了pw.equals(p)为false的情况;解决方法就是在
String pw=rs.getString(3);这一句上面加上.trim();去掉后面的空格;
即:String pw=rs.getString(3).trim();
好了,已经标好了颜色,请大家在编辑程序的时候注意一下!^0^ [/color]
---------------------------------------------------------------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())
{//如果用户存在
[color=red]String pw=rs.getString(3);//将库中第3列的数据取出来,即取出库中密码;[/color]
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) 程序没有识别对,不知何解?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值