0

我正在考虑为我的网站登录 Facebook。基于基于 facebook 的身份验证,用户将登录到该站点。并且将继续使用它,直到他/她从网站注销,无论 Facebook 登录状态如何。像大多数其他网站一样。

在查看 FB 的客户端登录方法时,我注意到它基于从 fbsr_{app_id} cookie 接收到的 signed_request 数据。FB 希望在它发出后 10 分钟内将其交换为有效的短期 access_token,以验证身份验证请求。(这 10 分钟似乎是 FB 为尽量减少安全漏洞所做的最大努力。)

但是,在这 10 分钟内,其他人可以复制 cookie 并且没有太大困难,可以成功尝试以受害者身份登录。这是我关心的问题,想问以下问题:

  1. 我是否在这里遗漏了有关 FB 客户端身份验证的安全方面的内容,或者它确实有这个弱点?

  2. 在我的实现中我可以做些什么来填补空白,还是转向 FB 的服务器端身份验证是唯一的答案?

4

1 回答 1

1

无论您使用服务器端流程还是客户端流程 - 如果使用正确,它们都是完全安全的。正如您所提到的,在基于非 SSL 的网站上使用 cookie 选项确实是一个漏洞,但这是不受 Facebook 控制的漏洞。

如果您想完全避免这种攻击向量,请不要使用 cookie 选项,而是使用您选择的机制(例如 XHR over SSL)将签名请求从前端传递到后端。为此,只需订阅相关事件 - 然后将使用签名请求作为响应的一部分调用您的处理程序。

应始终在服务器上验证签名请求,以避免任何篡改或虚假使用。signed_request 还包含issued_at 时间,应在最后10 分钟内进行验证。(对于 FB 的用户 id,使用它提供的 user_id)。

于 2013-01-11T05:32:01.807 回答