Kes*_*sty 1 security passwords
我正在考虑检查以记住用户他们的密码是区分大小写的,以防他们的密码正确但忘记在密码中使用大写字符.
第一个想法是简单地添加一个带有小写密码哈希的字段并检查(当密码检查失败时)如果插入的小写密码与小写字母匹配
伪代码
if(getpasswordHash(password.toLower()) == databes_lower_hash){
writeMessage("Remember that your password is Case Sensitive")
}
Run Code Online (Sandbox Code Playgroud)
是的,它会降低你的安全性.
你试图帮助用户通过改变通常的两状态(通过/失败)场景三态(通过/失败,但 - 你 - 是 - 近/失败)的情况.您介绍的这种中间状态肯定会降低您的安全性.
这是如何:
说一个黑客得到一些提示,我的密码是4个字符.如果他纯粹是蛮力的方式,那么他必须尝试(26*2)^4组合.但是一旦你实现了这个,那么只需要(26)^4组合,他就会得到一个...... 记住你的密码是区分大小写的 ......消息.从那时起,他必须为2^4每个角色的小/大案件尝试最多的组合.因此,强力屏障显着减少.
您现在必须在数据库中存储两个哈希值.即使您使用不同的盐,无论如何,您仍然要将蛮力障碍减少一半.为了破解密码,黑客现在可以部署两台专门用于破解一个哈希的计算机.有效地将时间缩短了一半.
当然这些是极端情况.密码永远不允许4个字符长.也会有特殊的字符.军事类黑客很难有机会针对你的应用程序.你看不出有人能偷走你的密码表.但所有这些都可以进行辩论.有社会工程,系统漏洞,甚至你的应用程序都可以吸引严重的黑客.您的应用程序所需要的只是吸引人群.坏人们带来了人群.
所以经验法则是:
有安全感,始终遵循既定规范.其他地方都有地雷.
尊重每个人的密码,因为它们是银行保险库本身的密码.