昨天编写了个网页登陆简单的实例,原本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) 程序没有识别对,不知何解?
分享到:
- 2009-09-11 13:04
- 浏览 1281
- 评论(1)
- 论坛回复 / 浏览 (1 / 1624)
- 查看更多
相关推荐
java实现json报文比对(含测试数据,项目可直接下载运行测试)
一个java web小demo,实现人脸匹配的小例子,具体使用情况可以参考我的博客
前段时间的一个web项目搞了个指纹登陆,用的是中控的Biokey 开发工具,安装控件驱动神马的, 就不多说了,zkonline的SDK里都有,由于指纹需要在服务器端做比对,但SDK里只提供了DLL库的方式来解决比对问题,所以需要...
数据库数据比对方法和比对系统.doc
相比之前的比对工具性能更加快速,直接运行java工程中的代码即可比对 1. 两个 MYSQL 数据库对象结构比对工具 (比如:本地测试库、远程运维库表结构、表中列等对比) 2. 比对结果导出EXCEL 存放于 “工程根目录”/...
将旧版本与新版本文本做处理, 用 del ins标签对新版本与旧版本比对后不同之处做标记
用QTP实现EXCEL数据比对
是一款超级专业且非常使用的文件数据比对工具,能帮助广大用户快速轻松地比较文件和文件夹,通过使用简单,功能强大的命令,大家可以专注于您感兴趣的差异,而忽略那些不需要的差异,并且大家还可以合并更改、同步...
该系统可以批量比对Excel和数据库数据,将结果集合并起来后导出excel,解决的问题就是,你有1000条数据,把它粘贴到一个文本文档,每行一条数据,和一个excel或数据的列进行比对,然后合并这1000条比对结果,再导出...
两份代码出现改动时 可以使用该工具进行比对其修改的地方
java实现的比对升级工具,很好用。适用于任何补丁生成,以及给项目打补丁。 原理是通过MD5校验值比较
本工具用于对比两个Excel文档中的数据,看两个Excel里哪个多出哪些行。对比后,相同数据在同行显示,本文档中缺少的数据,会在相应的行增加一个空行,以使数据对齐。
Main为启动类,现在只是将比对差异的内容输出到控制台 搭建项目时,记得将lib文件夹下面的jar添加到classpath中
直接运行java工程中的代码即可比对 1. 两个 MYSQL 数据库对象结构比对工具 (比如:本地测试库、远程运维库表结构、表中列等对比) 2. 比对结果导出EXCEL 存放于 “工程根目录”/export/ 目录下 3. 比对的对象包括...
用于数据比对,去重,取交集合集等,筛选出需要的数据,作为辅助工具
一个简单JAVA 小工程进行两个MYSQL数据库对象的比较,导入eclipse中,修改jdbc.properties文件中的JDBC信息,然后直接运行action包类中的main方法,生成EXCEL,excel中包含表,表中列,索引,函数过程差异比对结果。...
本项目是基于Java的大数据比对和数据探测平台设计源码,包含729个文件,其中主要包含305个java源代码文件,157个html页面文件,89个js脚本文件等。系统采用了Java、HTML、JavaScript和CSS技术,实现了大数据比对和...
用户将数据从前面界面传入服务器后端,后端通过JDBC连接数据库,实现数据的持久化操作。 在注册测试时,需要先检查用户名在此数据库中是否已经存在。 b.用户登录: 用户通过界面输入用户名 和 密码到后台...
Veridata 数据比对部署文档,Veridata 数据比对部署文档。
一个简单JAVA 小工程进行两个MYSQL数据库对象的比较,导入eclipse中,修改jdbc.properties文件中的JDBC信息,然后直接运行action包类中的main方法,生成EXCEL,excel中包含表,表中列,索引,函数过程差异比对结果。...