在安卓应用程序中硬编码Twitter消费者密钥和秘钥有多安全?

4
我来看这段示例代码:

我正在查看这段示例代码:

authConfig = new TwitterAuthConfig(BuildConfig.CONSUMER_KEY, BuildConfig.CONSUMER_SECRET);

什么防止别人反编译.apk并开始使用我的应用程序消费者密钥和秘密?

就此而言,API 是 Twitter 推荐的 Fabric。很难相信在 Android 上使用 Twitter API 时没有风险地暴露 consumer_key/consumer_secret。 - Igor Orlanov
同意此评论并编辑了我的答案以适应。我认为这些令牌需要得到适当的保护,使用 Web 应用程序作为代理似乎被一些人使用(并且是有道理的)。 - Mike Curry
1
我不太理解代理解决方案。为什么通过代理进行的调用比通过 Twitter API 进行的调用更难以模拟呢? - Igor Orlanov
1
看起来我没有错过显而易见的事情。Twitter却错过了:[链接](http://arstechnica.com/security/2010/09/twitter-a-case-study-on-how-to-do-oauth-wrong/1/)。 - Igor Orlanov
使用自己的Web应用程序作为代理来调解所有对Twitter API的请求将保护您的消费者密钥和秘密,仅此而已。我没有建议其他任何事情。实际上,这意味着所有流量都需要通过您的服务器。这不是很好,但它会保护您的密钥。这就是它所涉及到的全部。 - Mike Curry
在“使用Twitter登录”的情况下,我必须从设备上调用Twitter API,因为我需要知道用户在设备上的身份。由于无法以安全的方式实现,因此我不会实施它。使用Facebook登录和使用Google登录已经足够好了。可惜,那个Twitter按钮很可爱。 - Igor Orlanov
2个回答

3
如果这是你的密钥,而应用程序是供他人使用的,则在反向工程中可以获得这些密钥。即使您在应用程序中对它们进行了加密并在使用时进行解密,您也需要在应用程序中包含解密密钥,因此决心恶意用户也可以进行反向工程和解密。
我还做了进一步的研究,因为这让我有点困扰。
我的理解是,CONSUMER_KEY和CONSUMER_SECRET是您的,应该受到保护。我认为在分发给用户的任何应用程序中分发它们都不是一个好主意。
相反,它们可用于创建作为支持后端Web应用程序的“bearer token”。通过从自己的Web应用程序内部调用适当的Twitter Web API来请求bearer token,即在安全环境中。
通过这种方式,您将拥有三个角色:您的移动应用程序,您的Web应用程序和Twitter服务。移动应用程序从您的Web应用程序请求bearer token。Web应用程序通过在Twitter REST API上进行服务器对服务器调用来请求bearer token,并且您的token和secret仍然属于您。 Twitter将bearer token返回给您的Web应用程序。您的Web应用程序可以将bearer token存储在Web应用程序会话中,并充当代理以请求Twitter并确保甚至bearer token也保密。
以下是一些参考资料: http://wickedlysmart.com/twitternews-oauth/ https://dev.twitter.com/oauth/application-only http://hayageek.com/login-with-twitter/

网页很容易。问题在于使用 Twitter 登录或从移动应用程序发推文。 - Igor Orlanov

-1

使用ProGuard工具防止反编译

基本上,要使用ProGuard工具,在名为project.properties的项目文件中设置以下值:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt

这是 ProGuard 工具的参考资料 http://developer.android.com/tools/help/proguard.html


2
混淆不会混淆文本中必须用于应用程序的字符串或数字,对吧?它们必须被存储以便应用程序代码可以访问并使用它们。 - Mike Curry

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