Facebook JavaScript SDK 安全问题?

6
我正在尝试将Facebook身份验证嵌入我的应用程序中。 我最初的努力是在浏览器中登录并获取代码。我将此代码传回我的API,获得访问令牌(保留在服务器上),并通过我的服务器路由所有请求到FB API。我认为这完全安全,因为我的客户端没有信息可以使其能够对FB进行授权调用作为我的应用程序。
然而,我一直在研究FB Javascript SDK以避免编写打开和关闭对话框的代码,并注意到它允许我获得“登录状态”,并返回给我访问令牌。此外,我在他们的文档中查看了FB授权流程,他们说客户端-服务器混合流程是可以的,其中服务器实际上会将“长期访问令牌”返回给客户端,并建议我使用HTTPS(公平)。
现在,所有这些都让我想到安全问题。我不能作为潜在的黑客注入一些javascript到用户的网页中,可以做以下两种情况: a) 进行getLoginStatus并获取访问令牌 b) 通过向我的API服务器发出请求并获取访问令牌
然后,如果用户授权我的应用程序执行此操作,将其用于发布到Facebook,就好像我的应用程序正在执行此操作一样?
我是一个安全新手,可能忽略了很多东西,但是请问有人能帮我理解我错过了什么吗?
提前感谢!
PS: 我知道我可以启用更高级的安全性来确保每次请求时都需要应用程序密钥,客户端无法执行此操作,因为该信息永远不会在客户端上可用。

安全.stackexchange.com 可能是一个更好的地方。 - Barmar
@Barmar你建议把它复制到那里还是全部移动? - stripathi
一般来说,SE 不喜欢同一个问题在多个网站上出现,因此应该将其移动。 - Barmar
明白了,现在开始移动。感谢您的回复。 - stripathi
由于在安全堆栈交换中没有得到任何回应,因此我将恢复此内容。如果有人能够评论,我将不胜感激。 - stripathi
2个回答

6
我不是安全专家,只是一些想法:在你的问题中,你假设黑客使用恶意软件将脚本注入到用户浏览器中的网页中,然后该脚本会与你客户端上的数据进行交互。
现在,如果我们想象这个情况确实发生了,那么即使你没有客户端上的访问令牌,恶意脚本也可以访问网页数据,那么有什么阻止恶意脚本向你的服务器发出请求并通过你的服务器与 Facebook 进行交互呢?
此外,如果用户打开 Facebook 并在那里授权,那么恶意脚本可以被注入到 Facebook 页面中,并代表用户执行任何操作,只需向 Facebook 服务器发送请求即可。
因此,对我来说,如果你描述的情况发生了,那么存储访问令牌客户端端或不存储都无所谓——恶意脚本仍然能够完成它的工作。
实际上,如果你担心安全问题,首先要仔细查看所有与身份验证和安全相关的 Facebook 文档,并遵循他们的建议。其次,搜索常见的已知攻击向量和如何避免应用程序中的安全风险的建议。如果用户的计算机已经感染了能够更改浏览器行为的恶意软件(例如向页面注入其他脚本),那么你可能无能为力。

1
你提出了一些有价值的观点。我可以通过不允许来自不同来源的脚本与我的API通信,并配置Facebook仅在我发送带有API密钥的访问令牌时才接受请求(这是永远不会出现在客户端上的)来增加更多的安全性。我大部分都同意,将此标记为答案。如果有更好的答案发布,我将在7天后授予您奖励。感谢您的评论。很高兴成为这个社区的一员。 - stripathi

4

只有在您的 Facebook 应用程序设置中有效的重定向 URI(等同于您的站点 URL)时,才能获取访问令牌。

此外,在使用 Facebook 访问令牌发布帖子之前,需要获得权限。

您可以在 https://developers.facebook.com/tools/explorer/ 中检查 API 调用。


嗨 Rex,感谢回复。
  1. 重定向URI(在我看来)不应该是私有的,并且可以轻松从客户端js中读取。
  2. 我的情况是在请求和授予权限之后尝试进行探索。
感谢提供链接。我会探索一下。 另外,也许我的问题不太清楚。我会在今晚EST更新问题并尝试为每个要点添加更多细节。
- stripathi
是的,获取访问令牌的唯一方法是您必须拥有已发布的应用程序,并且用户允许API上的某些权限。 - Rex Adrivan
用户如何使用他们的访问令牌完全取决于他们自己 :) - Rex Adrivan
那么我们是在暗示我可以出去开发恶意软件进行分发,找出哪些应用程序允许付款,并尝试向自己付款吗?我觉得Facebook不可能保持这种漏洞。注意:我只是在开玩笑,请不要误解。 - stripathi
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接