提示“用户名或密码不正确”很糟糕

译者按: 好像真的有点道理!难住了用户,并拦不住黑客!

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

你也许听说过最佳安全策略是:登录的时候不要提示“密码不正确”,而是“用户名或密码不正确”。
在这里我想说这是一个混蛋策略,一点也没用。

来,我给你们看看Strip和Github的登录页:





为什么会有这样的设计呢?因为如果黑客知道用户名,他/她就可以专注于使用各种攻击方法比如(SQL注入、暴力破解、网络诱骗等等)来获取密码。

我接下来告诉你这个策略为啥行不通。





完了,我的用户名被你们看到了,我的账户接下来很危险了!更不用说你可以直接去https://github.com/travisjeffery页面来判断travisjeffery是否是用户名。

所以黑客只需要去注册页面尝试使用用户名注册一下,就知道该用户名有没有被注册。为何在登录的时候还要使用模棱两可的提示语?只要最蠢的黑客遇到“用户名或密码不正确”这样的提示才会被难住。因此,事实上你并没有获得更高的安全等级,但却让你的客户使用变得麻烦很多。

Strip将表单提交放在reCAPTCHA验证之后,来阻止简单的脚本攻击。不过,还是出过好几次问题(1, 2),而且貌似永远不会完美解决。就算reCAPTCHA可以完全防住脚本攻击,黑客还是可以通过注册来测出用户名,然后再发动攻击。

为了防止黑客去推测账户是否存在,最好的办法就是通过填入邮箱地址,并且不会提示是否有该注册邮箱的情况下将登陆链接发送到用户的邮箱。黑客想要破解这种方式的唯一方法就是除非他能够访问用户的邮箱。

我还是要说:提示“用户名或密码不正确”是一个混蛋策略!

Fundebug提供网页JavaScript错误监控,如果有频繁的登录尝试,Fundebug也可以捕获到相关错误信息的喔!