我正在考虑在我的 web 应用程序上实现经典的“记住我”复选框,以允许经过身份验证的用户在他返回访问我的网站后被“记住”。
Gmail、Facebook和其他人都有这种功能,但我不太确定它有多安全。
像Spring Security这样的 Java 框架使用“基于哈希的令牌方法”。生成的令牌(使用用户名、密码、过期时间和私有密钥)存储在客户端的 Cookie 'token=567whatever567' 中。然后在用户下次回来时重新使用该令牌以重新验证用户身份。
我担心即使登录过程发生在 https 连接下,在每个后续的 http 请求中,cookie 都会在网络上以未加密的方式发送。
基本上每个人都可以读取令牌并重用它来进行身份验证。
我想看看 Gmail 或 Facebook 是如何实现这个功能的。我可以在 FB 中看到一些 Cookie,例如 'presence=DJ267619445G09H0L15228675 .....',其他在 Gmail 中。
我不太确定他们是否使用其他技巧来防止有人试图冒充其他用户。
我将尝试使用cURL之类的东西来模拟自己,看看他们是否只使用特定的令牌来记住用户。
如果是的话,在我看来这是一个很大的安全问题。也许不是 facebook(我不在乎),但如果您没有设置“始终使用 https ”,则使用 Gmail,将使用 http 连接,它将通过互联网发送您未加密的令牌。
你怎么看?
我还注意到 Facebook 用户名/密码字段在 http(不是 https)下公开。在这方面,我也想知道:是否所有网站都通过 http 不安全“本质上”公开用户名/密码字段。一旦通过 http 发送请求,就没有“重定向到 https”可以解决“全世界可见的凭证”问题。
谢谢
编辑:
我的担心是有根据的http://codebutler.com/
感谢Firesheep的创建者强调了这个问题!!!