尽管我下面要讲述的情景并不会经常出现,但后果却是很严重,希望引起Google的注意,同时也希望能提醒提供类似功能的其他公司!
我注册了Google的帐号,有了一个GMail邮箱,他很好用,而且我每天都要登录我的邮箱收发信件。
正是由于使用频繁,我在登录的时候,选中了“在此计算机上保存我的信息”,免去了每次登录都要输入密码的麻烦。
我在家,在公司,在我的笔记本上,三处地方,都应用了这种设置,所以我在这三台电脑上打开http://mail.google.com的时候,都是直接进入邮箱。
如果,我因为某事,不再继续为这家公司工作了,而我临走时忘记清空浏览器的cookie,那么,这个公司的网管,就可以登录我的系统,查看我遗留的各种文档。
当他再次打开http://mail.google.com的时候,直接进入了我的邮箱!!!
这是一个非常严重的问题。
我曾经想过补救,我认为这方法应该有效,但Google没有这样做:
我在家里的电脑上登录GMail,更改我的密码,然后退出登录,当我再次登录时,需要输入新的密码。这个过程没问题。
但我用我的笔记本,在浏览器上打开http://mail.google.com,依然可以访问。
这就是问题的根源!!!
这个时候,那家公司的网管,是可以访问我的邮箱的,因为Google没有对密码做数字签名!这是问题的关键!也是我这篇文章的核心内容!
在Web安全方面,Google应该有很深的经验了。
利用cookie记录登录状态,避免每次输入密码,是很好的设计,很人性化。
唯一的缺点,就是没有提供给用户一个既安全又方便的途径来取消这一遍历登录方式。
如果是我,我会进行如下改进:
1、用户登录的时候,对用户的密码做数字签名,比如,随机生成一个密钥 randKey
2、在服务端,以用户的密码 userPassword 和刚才这个密钥 randKey 作为输入参数,传给一个复杂一点的加密算法
3、加密算法算出一个密码签名 passSignature,这个值是单向的
4、把 randKey 和 passSignature 存到cookie里
5、Google 的服务端保存用户的密码(其实在你注册的时候,就已经保存了)
6、当用户登录的时候,服务端接收到 cookie 中的 randKey 和 passSignature,在服务端验证 passSinature 是否和 randKey + userPassword 加密过的字符串匹配,如果匹配,则正常登录
7、如果不匹配,要求用户重新输入密码,密码正确,说明用户身份正确,在重复第1步
说明,这样的好处是,如果用户在其他客户端上修改了密码,那这个用户再其他所有使用过的浏览器上 cookie 中保存的 passSignature 都将失效。
还有,在第5步,保存密码的环节,其实,userPassword 不必是密码的原文,经过单向加密过的密文也一样,可以用md5。
经过这么几步,用户帐户的安全性可以得到很大提升,对Google来说,这个计算过程很简单,对性能的影响微乎其微。
Google的PM和RD,你们能看到这篇文章吗?
非常同意用密码作为签名的方法!
Google的PM和RD,你们能看到了就请赶紧改吧~
你的文章大多是谬论,低级的无知者。
哈哈,有人踢场子~~
请教,哪里是谬论,给出你的正确结论呀,然后让更多的人知道什么是对的~~
我记得好像没这个问题,在某种条件下,google的自动登录会消失
我用了google browser sync