在Android上保护twitter密钥

在Android上保护twitter密钥,android,facebook,security,authentication,twitter,Android,Facebook,Security,Authentication,Twitter,在将twitter身份验证添加到我的android应用程序时,我震惊地发现我必须像这样初始化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.onCrea

在将twitter身份验证添加到我的android应用程序时,我震惊地发现我必须像这样初始化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密钥API机密作为纯文本放在我的应用程序中。即使在此中,密钥也存储在
BuildConfig

我使用的是Proguard,但即使如此,我也不能保证一个坚定的黑客不会利用我的API秘密。像Quora这样的成熟应用程序也会公开这些密钥吗

是否有人可以发布一个克服此漏洞的示例,或者就Twitter为什么这样做给出一个令人信服的论据?


相比之下,GoogleFacebook只需要我添加一个AppID,我必须散列我的签名证书,并将散列链接到各自的应用。这一级别比上述级别更安全。

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

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

Alex来自Fabric。只是想进一步说明为什么我们在示例应用程序和一些文档中显示此方法。示例说明了与工具包集成的最简单机制。每个团队和组织在安全性方面都有不同的策略,因此我们将如何保护以及在何处存储密钥和机密的决定权留给每个开发人员。我当然听到了,我们可以考虑提供关于更安全选项的文档。@Alexizamerican非常感谢您的回复。我打算使用的twitter密钥具有写访问权限。在我看来,无论我如何安全地创建这些字符串,我仍然会将我的Twitter API秘密发送给用户。我没有任何保证解决这个安全问题的方法,所以我想知道是否还有其他方法可以做到这一点。我同意这是一个复杂的方法。理想情况下,应用程序应该永远不能访问我的秘密。您好,我也很担心这个问题。您是否找到了一种更安全的方法来存储密钥/密钥对?我还想知道集成twitter是否是一个好主意,因为这看起来完全不安全。@Simon不幸的是,不是。我只是因为这个原因放弃了twitter身份验证。然而,如果你真的需要它,你最好的选择是dexguard,但这是付费的。是的,加密字符串很难消除混淆(不确定这是否是一个词:P),但由于我在应用程序中添加了必要的加密代码,这并不能保证安全性。此外,如果有人开发一个漏洞,从一个pro(dex)防护的应用程序中提取twitter密钥,这将使他能够访问大量twitter应用程序。看起来安全漏洞太大了,该死。我没想到。如果您将秘密存储为一个字符数组(或整数?),然后使用自己的逻辑来复制字符串,那么只要您“应用”Proguard,您就应该得到保护。