Authentication 使用OpenID时保持登录的安全策略

Authentication 使用OpenID时保持登录的安全策略,authentication,cryptography,openid,Authentication,Cryptography,Openid,我有一个使用OpenID登录用户的网站。我使用的库在用户登录时返回用户配置文件。此配置文件包含用户的电子邮件、姓名、到化身的链接以及OpenID提供商返回的ID 我保持用户登录的策略如下: 当用户第一次登录时,我根据OpenID返回的ID创建一个哈希代码 我将此哈希代码与用户ID一起存储在2个cookie中 当用户访问我的网站时,我会检查这些cookies,如果它们可用,尝试匹配ID和哈希代码,如果正确,我会让用户登录 现在的问题是:如果用户不知何故窃取了cookie信息,黑客可以轻松地代替

我有一个使用OpenID登录用户的网站。我使用的库在用户登录时返回用户配置文件。此配置文件包含用户的电子邮件、姓名、到化身的链接以及OpenID提供商返回的ID

我保持用户登录的策略如下:

  • 当用户第一次登录时,我根据OpenID返回的ID创建一个哈希代码
  • 我将此哈希代码与用户ID一起存储在2个cookie中
  • 当用户访问我的网站时,我会检查这些cookies,如果它们可用,尝试匹配ID和哈希代码,如果正确,我会让用户登录
现在的问题是:如果用户不知何故窃取了cookie信息,黑客可以轻松地代替用户自己登录。我可以为用户每次登录创建一个新的哈希代码,并更新用户的cookies,但这会使其他浏览器/计算机的cookies信息无效



由于StackOverflow网站不存在此类问题,我想知道应该如何保护我的登录策略并添加功能以保持用户登录。

这不是让客户端保持登录的所有机制的问题吗?如果你登录你的,比如说gmail,我偷了你的cookie,把它们放在我自己的浏览器里,就没有办法区分我的浏览器和你的浏览器,我就可以访问你的gmail。我相信,没有办法阻止你所建议的那种攻击(除了用户让他们的计算机免受可能窃取cookie的病毒等攻击)

让客户端保持登录的所有机制都有问题吗?如果你登录你的,比如说gmail,我偷了你的cookie,把它们放在我自己的浏览器里,就没有办法区分我的浏览器和你的浏览器,我就可以访问你的gmail。我相信,没有办法阻止你所建议的那种攻击(除了用户让他们的计算机免受可能窃取cookie的病毒等攻击)

标准方法是分配一个无意义的会话ID,并将其作为cookie发送;在数据库中,您可以将用户的凭据信息与会话ID一起存储。当用户注销时,您可以使该会话ID无效。

执行此操作的标准方法是分配一个无意义的会话ID,并将其作为cookie发送;在您的数据库中,您可以将用户的凭据信息与会话ID一起存储。当用户注销时,您可以使该会话ID无效。

那么您是否建议此策略(当用户的cookie被盗时,更新用户哈希代码的一种方法)足够安全?是的,我认为是这样。它可以防止cookie伪造,这很好(我已经为我正在进行的一个项目实现了类似的功能)。对于客户端浏览器的凭据被盗,您无能为力,除非禁用敏感的自动登录。那么,您是否建议此策略(当用户的cookie被盗时,为用户更新哈希代码的一种方法)足够安全?是的,我认为是这样。它可以防止cookie伪造,这很好(我已经为我正在进行的一个项目实现了类似的功能)。对于客户端浏览器的凭据被盗,您无能为力,除非禁用敏感的自动登录。您所说的“哈希代码”是什么意思?如果只是用户openid URL的安全散列,攻击者就可以猜到——根本不需要费心获取原始Cookie。你怎么知道StackOverflow网站没有遇到这个问题?@NickJohnson你说得对,但我正在尽力让他们难以猜到。但不知何故,我认为随机会话id(如您所述)会是一个更好的解决方案。@zespri因为当我登录到两个浏览器时,它们都保持登录状态。这表明,如果您的cookie信息不知何故被窃取,黑客无法代替您轻松登录。您所说的“哈希代码”是什么意思?如果只是用户openid URL的安全散列,攻击者就可以猜到——根本不需要费心获取原始Cookie。你怎么知道StackOverflow网站没有遇到这个问题?@NickJohnson你说得对,但我正在尽力让他们难以猜到。但不知何故,我认为随机会话id(如您所述)会是一个更好的解决方案。@zespri因为当我登录到两个浏览器时,它们都保持登录状态。这表明,如果您的cookie信息不知何故被窃取,黑客无法代替您轻松登录?谢谢。我想这是一个更简单、更好的解决方案。(创建随机会话ID,而不是基于哈希算法+salt创建)谢谢。我想这是一个更简单、更好的解决方案。(创建随机会话ID,而不是基于哈希算法+salt创建)