gpt4 book ai didi

Android facebook-sdk签名安全

转载 作者:太空狗 更新时间:2023-10-29 14:27:43 24 4
gpt4 key购买 nike

我们一直在我们的 Android 应用程序中实现 Facebook Android SDK,它需要在 Facebook 服务器上存储应用程序签名,以便验证从应用程序到 Facebook 的调用。我们想将这个系统用于我们自己的后端,以确保它只被我们的应用程序使用,对此我有以下问题:

(引用https://github.com/facebook/facebook-android-sdk/tree/master/facebook/src/com/facebook/android查找相关类)

  1. 显然,要通过匹配签名来验证调用,需要将应用程序的签名发送到服务器。在 sdk 中,我似乎找不到这是在哪里完成的?
  2. 似乎没有使用 https,对吗? (Util.java)
  3. 难道不能嗅探签名从而使整个系统变得毫无意义吗?
  4. Facebook.java 在文件底部保存 facebook 应用程序的签名。改变这个似乎微不足道。但是据我所知,发送 Intent 的应用程序的签名可以通过该 Intent 来解析。 Android 系统对此进行管理,因此无法伪造签名。但是,在调用 url 时,Android 系统能否以不可变的方式将签名添加到协议(protocol)中?我猜不是,这让我想知道上述问题。

[编辑回复 nitzan & zapl]

我想要实现的与 facebook sdk 要求您将签名存储在他们的服务器上的原因相同;确保对我们后端的调用是从我们的应用程序发送的,而不是其他任何东西。我们不想让机器人或其他应用程序访问我们的服务器 api。 facebook sdk 有方法检查Intents 是否来自Facebook 应用程序,这是安全的,因为Android 系统对签名和Intents 进行封闭管理。妥协的唯一方法是运行修改后的 Android 版本,该版本允许覆盖应用程序签名,但人们构建和运行的几率可以忽略不计。然而,运行一个应用程序、嗅探通过非 https 协议(protocol)发送的签名并构建一个使用此签名和 api 调用的应用程序不是。似乎让这样一个系统工作的唯一方法是使用 https,而 facebook sdk 似乎没有。

请注意,我上面描述的 Intent 验证方法不同于对 facebook 服务器的 url 调用。 Intents 用于让设备上的 Facebook 应用程序与实现 SDK 的应用程序进行通信。 Android 系统确保与传入 Intent 一起发送的 Facebook 应用程序的签名不能被伪造,因此 Facebook 应用程序-> 应用程序通信系统是安全的。与这个内部系统相反,我的问题是关于向服务器发出 url 调用的外部系统,如果签名可以在调用过程中发送不可变的,这将是安全的,基本上实现与 Intent 系统相同的系统。

[编辑 2]

事实证明,与我们的假设相反,应用签名很容易获取。虽然应用程序需要使用私有(private)开发人员 key 进行签名,但这不会损害 Android 上应用程序的安全性,但它显然不能用于验证服务器端的 api 调用。

这会引出更多问题:

  1. 为什么 Facebook 实现这个系统很容易被破坏?
  2. 是否有任何其他已知的实现来限制服务器 api 仅访问特定的应用程序? (混淆除外)

最佳答案

  1. 我不知道。
  2. 是的,它似乎正在用 http:// 替换 fbconnect:// Uri,这意味着使用此代码的连接没有加密。
  3. 我想是的,尝试验证一下。
  4. 改变它没问题,你可以反编译 apks 改变一些代码,如果你愿意的话再编译回来。你唯一不能做的就是再次签署 apk(你缺少为此所需的 key )。或者您可以在自己的代码中使用签名。
    您的应用程序的签名检查发生在安装时,如果您的签名不符合要求,您在 list 中请求的权限将被删除。如果您更新您的 apk,将根据旧的现有 apk 检查新 apk 的签名,如果签名不匹配,升级将失败。但是你可以卸载旧的并安装你的假的。
    如果您从您的应用程序发送 Intent,系统可能包含发件人的包裹,您无权更改它。

而且对服务器的整个验证点最终并不是安全问题,因为没有可靠的方法来验证应用程序。它用于使其他人更难滥用 API,并用于跟踪谁在使用该 API。

身份验证机制要求您的 apk 中有某种 key 。但是,由于您将该 apk 发送给潜在的恶意客户,您无法再控制它,并且有可能提取 key 并滥用它。您所能做的就是混淆 key ,这样就更难获得它。但这终究是不可能的。


因此,假设您有一个应用程序可以与您的后端服务器通信,并且我将您的应用程序下载到我的设备上。然后,我可以从我的设备上获取 .apk,对其进行反编译并了解与您的服务器的通信方式 - 创建 https 之前的明文。我还可以看到您的应用程序的签名是什么,它存储在设备和 apk 中的 xml 文件中。然后我要么修改你的应用程序,要么创建一个新的应用程序,它使用这些信息来表现得与你的应用程序完全一样,但它不是你的应用程序。使用https没问题,我也可以把你想要的签名发给你。

您无法阻止这种情况的发生。你只能让它变得难以做到。

关于Android facebook-sdk签名安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10372427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com