关于CWebUser的安全性疑问

看了源代码, 如果设置CWebUser的allowAutoLogin为true的话,会把当前登录用户信息加密后保存到cookie,然后下次用户访问时,从cookie中还原登录信息。

这样有一个问题,如果一旦服务器密钥泄漏或者被猜解,会导致恶意用户能伪造任意用户的登录cookie,似乎不太安全吧。

还有一个问题,

就是如果在用户离线的这段时间里,用户states被更改的话,不能从restoreFromCookie反映出来。

如果服务器密钥泄漏,这本身就意味着重大安全问题,就像你的登录密码泄漏一样。

登录密码泄漏毕竟只影响一个账号,如果服务器密钥泄漏所有帐号都受影响了。

主要还是从cookie中恢复states不能保证和当前真实的states是一致的。

我想如果cookie中只是保存用户登录的token会不会好点呢,不过这样的话必须在CWebUser的配置信息中指定IUserIdentity的Provider,但也可以把IUserIdentity的Provider路径/名字直接保存在cookie里,restoreFromCookie时可以据此找到对应CUserIdentity类,通过类的静态方法来并根据cookie中的token信息来生成UserIdentity对象。

我觉得也是,存个随机字符串来做自动登录安全点,每次登录都更新一下,服务器KEY虽然很难破,但是一破就全完了

有道理。我们将增强这方面的安全措施。

呵呵,太好了。

添加了beforeLogin和afterLogin到CWebUser。现在你可以在beforeLogin里验证随机token,在afterLogin里更改token。当然,你还需要在user identity里添加这个token state。

稍微麻烦了点,不过这是在不改变兼容性情况下我能想到的办法了。

正需要这个。我以前是重写恢复cookie来达到这个目的。