我正在考虑为我的网站登录facebook。基于基于Facebook的身份验证,用户将登录该站点。并且将继续使用它,直到他/她从网站注销,无论Facebook登录状态如何。像大多数其他网站一样。
在查看FB的客户端登录方法时,我注意到它基于从fbsr_ {app_id} cookie收到的signed_request数据。并且FB想要在10分钟内交换有效的短期access_token,以验证身份验证请求。 (这10分钟似乎是FB最大限度地减少安全漏洞的努力。)
然而,在这10分钟内,其他人可以复制cookie并且没有太大困难,可以成功尝试登录为受害者。这是我关心的问题,并想问下列问题:
我在这里错过了关于FB客户端身份验证的安全方面的内容,或者确实存在这个缺点?
我的实现中是否可以做些什么来填补空白,或者转向FB的服务器端身份验证是唯一的答案?
答案 0 :(得分:1)
无论您使用服务器端流程还是客户端流程 - 如果使用正确,它们都是完全安全的。 正如您所提到的,在非基于ssl的站点上使用cookie选项确实是一个漏洞,但这是一个不受Facebook控制的漏洞。
如果您想完全避免使用此攻击向量,请不要使用cookie选项,而是使用您选择的机制(例如XHR over SSL)将签名请求从前端传递到后端。要做到这一点,只需订阅相关事件 - 然后将使用签名请求作为响应的一部分调用您的处理程序。
应始终在服务器上验证signed_request,以避免任何篡改或虚假使用。 signed_request还包含issued_at时间,应该验证它在最后10分钟内。 (对于FB的用户ID,请使用随附的user_id。)