“Remember Me On This Computer” - How Should It Work?
查看Gmail的cookie,很容易看到"记住我"cookie中存储了什么。用户名/一次性访问令牌。它也可以在用户名是秘密的情况下以不同的方式实现。但不管怎样…事情的安全性不是很高:你偷了饼干就准备走了。
但是,我的问题是在功能方面:您什么时候擦除他们的访问令牌?如果用户登录时没有在另一台计算机上单击"记住我",那么它是否会使所有计算机上的访问令牌失效?我在问传统上这是如何实现的,以及应该如何实现。
文章Persistent Login Best Practice和Improved Persistent Login Best Practice是关于如何实现这类功能的重要参考。
另请参见这些stackoverflow问题
- 为网站实现"记住我"的最佳方法是什么?
- 网站认证的最终指南
我经常同时使用2或3台机器,并且在所有机器上都有"记住我"。如果其中一个断开了另一个,那将是非常烦人的,所以我不推荐它。
传统上,它会使用超时,cookie会在一段时间后(或者当用户注销时)过期。
这完全取决于您的安全模型。如果您正在编写一个内部公司应用程序,您只希望一个用户在一台计算机上,那么您可能希望有比Gmail更严格的限制。
此外,请记住拒绝服务的可能性-如果一台计算机上的操作可能会强制另一台计算机不可用,则可以使用此方法防止合法用户在某些情况下收回控制权。
从另一台计算机登录不应使与另一台计算机上的cookie关联的登录无效。但是,如果用户登录或"不是你"?登录这里"这应该清除用户正在使用的cookie。
顺便说一句,偷一个cookie是很难的,因为它坚持使用https,而不是为了编写脚本。
通过向cookie的输出添加";httponly",这将使cookie对javascript不可用,例如
1 2 3 4 5 6 7 8 9 10 11 12 | HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Encoding: gzip Vary: Accept-Encoding Server: Microsoft-IIS/7.0 Set-Cookie: ASP.NET_SessionId=ig2fac55; path=/; HttpOnly X-AspNet-Version: 2.0.50727 Set-Cookie: user=t=bfabf0b1c1133a822; path=/; HttpOnly X-Powered-By: ASP.NET Date: Tue, 26 Aug 2008 10:51:08 GMT Content-Length: 2838 |
你可以阅读更多关于这个的信息
- 对于.NET
- 火狐支持
- 杰夫-编码很难,我们去购物吧
"记住我"cookie也应该识别机器。它应该与机器有关,因为有些地方你想被记住,有些地方你不想被记住(家与工作)。
到期日期通常设置为一个合理的期限(两周)或在用户明确从机器注销之后,
访问令牌应该是特定于IP的,这样它们就不容易跨计算机传输。
它们的实现方式还应该允许用户查看哪些机器上有活动的令牌。
一旦在另一台计算机上创建了一个新的令牌,则选择终止该令牌的站点-选择其用户将不在多台计算机上访问其服务-或者如果选择了,则选择其使用方式使其重新登录。
您使用的策略实际上取决于您所持有的数据和用户的需求。
我要做的是将每个会话链接到一个IP地址。如果会话令牌是从与您所拥有的IP不同的IP发送的,请拒绝它。