网站登录时用户名和密码是如何验证的,有先后顺序吗?
是不是都可以单独判断出是用户名错误还是密码错误?为什么很多网站在用户名或密码错误的时候给出一样的报错:用户名或密码错误。这种情况出于什么考虑?
请专业人员用通俗的语言解答一下,谢谢~
还是有顺序的,一般是先根据用户名查到用户记录,然后再把这条记录的密码取出来,并根据加密算法与你输入的密码进行比对。这样比直接用用户名和密码来取记录有以下好处
- 节省查询开销,用户名和密码是两个字段,你用两个字段做查询条件肯定比一个字段要慢,就算你做了联合索引,还是要慢,因为字段长度增加了。
- 可以先行判断出用户是否存在,这样可以有更加友好的提示,比如你在问题中提到的。但是大多数网站为了防止用户数据库被爆库,会直接告诉你一个笼统的结果,比如”找不到匹配的记录”之类的。
先判断用户名是否存在,再判断密码是否正确。
如果用户名存在 {
如果密码正确 {
登录成功
}
否则 {
密码错误
}
} 否则 {
用户名错误
}
很多网站只显示“用户名或密码错误”一方面的原因是出于安全考虑,怕有人恶意猜测用户名。
只显示“用户名或密码错误”是出于安全考虑,比如可以猜测是否存在admin等用户名,从而穷举密码。
建议判断用户名密码前先判断验证码,理由同上,防止账户穷举。
验证码等通过后,用户名和密码的判断可以根据自己的实际情况判断,注意提交sql时防止sql注入
你好,没有先后顺序,就是把你输入的信息和数据库中存的数据作对比。我觉得有时给出用户名或密码错误这样的提示,是因为他们觉得没必要或者懒,没有给出具体哪个出错。
对于登录这个问题,我个人比较喜欢类似于这样的逻辑
1、select 密码, 用户状态 from 用户表 where 账号 = ‘@账号sql参数’
2、比较密码
3、判断用户状态
当然登录如果账号和密码不一致的时候,是用“用户名或密码错误”的提示
正文完