【问题标题】:Protecting twitter keys on Android保护 Android 上的 Twitter 密钥
【发布时间】:2015-09-11 16:42:06
【问题描述】:

当向我的 Android 应用程序添加 Twitter 身份验证时,转到 Twitter dev,我惊讶地发现我必须像这样初始化 Twitter 的 Fabric

import io.fabric.sdk.android.Fabric;
import com.twitter.sdk.android.Twitter;
import com.twitter.sdk.android.core.TwitterAuthConfig;
...

@Override
public void onCreate() {
    super.onCreate();

    TwitterAuthConfig authConfig = 
                new TwitterAuthConfig("consumerKey",
                                     "consumerSecret");
    Fabric.with(this, new Twitter(authConfig));
}

他们官方推荐我将 API KeyAPI Secret 作为明文放在我的应用程序中。即使在这个official sample中,密钥也存储在BuildConfig中。

我正在使用 Proguard,但即便如此,我也不能保证一个坚定的黑客无法利用我的 API SecretQuora 等成熟的应用程序是否也会公开这些密钥?

有人可以发布克服此漏洞的示例,或者就 Twitter 为何这样做提供令人信服的论据吗?

相比之下,GoogleFacebook 只需要我添加一个 AppID,我必须对我的签名证书进行哈希处理并链接这些哈希值到各自的应用程序。这是比上面更安全的数量级。

【问题讨论】:

  • 来自 Fabric 的 Alex 在这里。只是想扩展一下我们为什么在示例应用程序和我们的一些文档中展示这种方法。这些示例说明了与套件集成的最简单机制。每个团队和组织在安全方面都有不同的政策,因此我们将如何保护以及将密钥和秘密存储在哪里的决定权留给了每个开发人员。不过我肯定听到了,我们可以考虑提供有关更安全选项的文档。
  • @Alexizamerican 非常感谢您的回复。我打算使用的 twitter 密钥具有 write 访问权限。在我看来,无论我制作这些字符串有多安全,我仍在向用户发送我的 Twitter API 密码。对于这个安全问题,我没有任何保证的方法,所以我想知道是否有其他方法可以做到这一点。我可以接受它是一种复杂的方法。理想情况下,该应用永远不应该访问我的秘密。
  • 您好 - 我也很担心这个问题。您是否设法找到一种更安全的方式来存储密钥/秘密对?我还想知道集成 twitter 是不是一个好主意,因为这看起来完全不安全。
  • @Simon 不幸的是,没有。因此,我只是放弃了 Twitter 身份验证。但是,如果你真的需要它,你最好的选择是 dexguard,但这是有偿的。

标签: android facebook security authentication twitter


【解决方案1】:

您可以在 res/ 目录中创建一个 secrets.xml 文件,并使用这些值包含常量并从您的活动中引用它们。

【讨论】:

    【解决方案2】:

    Proguard 不会混淆字符串文字。相反,您可以将秘密存储为加密字符串(可能使用 AES)并在需要时解密。或者,StringerDexguard 等商业程序提供字符串混淆。

    【讨论】:

    • 是的,加密的字符串更难解混淆(不确定这是否是一个词:P),但由于我在应用程序中放入了必要的加密代码,因此不能保证安全性。此外,如果有人开发了一个从 pro(dex) 保护的应用程序中提取 twitter 密钥的漏洞,它将使他能够访问大量的 twitter 应用程序。这似乎是一个太大的安全漏洞。
    • 该死的。我没有想到。如果您将秘密存储为字符数组(或整数?),然后使用您自己的逻辑来重现字符串,那么只要您“应用”Proguard,您就应该被覆盖。
    猜你喜欢
    • 2014-02-18
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多