黑马程序员_不安全的用户名密码验证

------- android培训java培训、期待与您交流! ----------

在验证用户名和密码时使用的方法是,先用用户名(uid)得到一个User类型的对象user,再用equals方法匹配userpassword属性和表单提交的password数据是否相等。为什么要这样做呢?为什么不直接将表单提交的数据uidpassword传递到DAO类,然后编写如下的查询语句,如果有结果返回则表明登录成功?

SELECT * FROM  user  WHERE uid=” + ‘uid’ +” and password=” ‘+ password +’ ”

这是许多初学者和经验不足的程序员会写出的语句,表面上看起来这样的语句没有任何问题,可是当遇到有意图的破坏者,这将会产生严重的后果。试想,如果用户在登录表单的密码输入框中输入的内容为“ ‘or’ ‘1’=‘1’”,而不管在用户名输入框中输入什么内容,以上的SQL语句组合完毕过后将有如下的形式:

SELECT * FROM  user  WHERE uid=’asdf’ and password=’ ’ or ‘1’ = ‘1’

显然,无论用户名输入什么,这条语句总能将user表中的所有内容查出来,也就是说,破坏者只需要输入一些特殊的字符就可以轻易地登录到系统,这无疑是一个极大的漏洞,潜在的损失也就是不可估量的。

因此,在验证用户名和密码时使用的方法是,先用用户名(uid)得到一个User类型的对象user,再用equals方法匹配userpassword属性和表单提交的password数据是否相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值