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

来源:互联网 发布:南京大汉网络 编辑:程序博客网 时间:2024/05/16 04:47
------- 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数据是否相等。

原创粉丝点击