2014-01-21 54 views
5

根据面向开发者的Facebook手册(https://developers.facebook.com/docs/facebook-login/security),您不必使用来自某些Facebook SDK客户端的access_token,但不确保它是专门为您的Facebook应用程序生成的。Facebook令牌劫持漏洞

我在想这里有什么样的漏洞。为什么我应该关心哪个应用程序接收到令牌?如果我可以使用它来进行API调用并通过它获取用户数据?

令牌劫持

要明白这是如何发生,假设要进行API调用原生iOS应用,但不是直接做这件事,由相同的应用程序和传球拥有的服务器进行通信该服务器使用iOS SDK生成一个令牌。服务器然后将使用该令牌来进行API调用。

服务器用于接收令牌的端点可能会受到影响,而其他端点可能会将访问令牌传递给完全不同的应用程序。这显然是不安全的,但有一种方法可以防止这种情况发生 - 访问令牌永远不应该被认为是来自正在使用它们的应用程序,而应该使用调试端点进行检查。

+1

那么有人可以传递一个令牌为另一个应用程序,然后你会试图执行与另一个应用程序,这将导致错误或不安全的行为。 –

回答

3

这些类型的漏洞是针对特定应用 - 一个情景我能想到的是这样的:

想象一下,你正在使用Facebook验证作为SSO机制,并创造了一个返回一些私人信息的web服务应用程序以认证用户。这个web服务被称为/secretdocuments/download,它将访问令牌作为参数。

如果web服务只检查其接收的访问令牌是针对数据库中有一个用户(通过调用/我,然后一个数据库查询),那么恶意攻击者可以:

  1. 创建一些其他“诱饵”应用程序。
  2. 向该用户发送指向该应用的链接,并鼓励他们安装该应用。
  3. 该用户使用诱饵应用程序进行身份验证,并生成一个访问令牌 。诱饵应用程序将此访问令牌发送给恶意用户。
  4. 恶意用户使用该访问令牌并使用它调用您的/secretdocuments/download webservice。
  5. 您的网络服务仅检查访问令牌是否针对数据库中的用户 ,并将私人信息返回给 恶意用户。

在这种情况下,您的Web服务必须检查所提供的访问令牌是由您的应用程序生成。