0

我刚刚开始在我的网站中集成 OpenID。我看到的所有示例都将声明的 ID 存储在 cookie 中。它如何安全?

例如,myopenid.com 返回声明的 ID,即 {username}.myopenid.com

因此,如果黑客知道您声称的 ID,他可以轻松破解您的帐户。

当然,您在将 ID 放入 cookie 并用于身份验证之前对 ID 进行加密/md5,但这就像存储没有密码的用户名一样!

更新

现在我想了想,我意识到,你需要登录 OpenID 提供者,所以即使黑客得到了用户名,他仍然需要提供者的密码才能登录。我说的对吗?

更新 2 不,更新 1 不正确 :) 我的网站无法检查用户是否成功登录。我收到的只是声称的 ID,我只需要相信用户已经过身份验证。这真是令人费解……

4

1 回答 1

3

知道用户声称的身份不足以进行身份​​验证。

实际上,用户必须登录到他的提供商,才能使用该身份对您的网站进行身份验证。

至于“相信用户已经过身份验证”——不,你不相信。作为 OpenID 身份验证的最后一部分,您应该验证身份验证消息是否来自提供者。有各种安全措施可确保消息的真实性、未更改等。如果您这样做,则可以确定您的用户已通过提供商的正确身份验证。

现在,由于您不想每次用户发出请求时都这样做,因此您将会话信息存储在 cookie 中。但是,您不只存储声称的标识符(如果您决定存储它),而是一个会话 id——用户登录时生成的伪随机数。由于它是伪随机的,所以没有人能猜到它,因此,了解声称的标识符本身并不意味着什么。

如果这回答了您的问题,请阅读您最喜欢的语言/框架中的会话管理,因为它将告诉您如何轻松实现这种机制,以及它是如何工作的。

总而言之:将 OpenID 视为密码验证的替代品。您不需要(也不应该)将登录名和密码存储在 cookie 中,也不必存储声明的标识符。同样,您不必每次都验证登录名和密码是否匹配,但请记住用户在会话中经过身份验证。

于 2011-09-18T16:47:35.297 回答