【问题标题】:how secure is it to have twitter consumer key and secret hardcoded in android app?在 android 应用程序中硬编码 twitter 消费者密钥和秘密有多安全?
【发布时间】:2015-03-19 07:56:28
【问题描述】:

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

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

是什么阻止了某人反编译 .apk 并开始使用我的应用使用者密钥和秘密?

【问题讨论】:

  • 对于它的价值,API 是 Twitter 推荐的 Fabric。真的很难相信,在 Android 上使用 Twitter API 而不冒暴露 consumer_key/consumer_secret 的风险是不可能的。
  • 同意此评论并在下面编辑我的答案以适应。我认为这些令牌需要得到适当的保护,并且使用网络应用程序作为代理似乎被某些人使用(并且有意义)
  • 我不明白代理解决方案。对代理的调用如何比对 Twitter API 的调用更难模拟?
  • 看起来我并没有错过显而易见的事情。 Twitter 做到了:link.
  • 使用您自己的网络应用程序作为代理来调解对 twitter api 的所有请求将保护您的消费者密钥和秘密,仅此而已。我没有提出任何其他建议。实际上,这意味着所有流量都需要通过您的服务器。这不好,但它会保护您的密钥。这就是它解决的所有问题

标签: android twitter twitter-fabric


【解决方案1】:

如果它是您的密钥并且该应用程序供其他人使用,那么如果反向工程,这些将在应用程序中可用。即使您在应用程序中加密并在使用时解密,您也需要在应用程序中包含解密密钥,因此确定的恶意用户也可以进行逆向工程和解密。

我也对此做了一些进一步的研究,因为它有点困扰我。

我的理解是,CONSUMER_KEY 和 CONSUMER_SECRET 是你的,应该受到保护。我不认为在分发给用户的任何应用程序中分发它们是一个好主意。

相反,它们可用于创建“不记名令牌”作为支持后端 Web 应用程序的一部分。可以通过从您自己的 Web 应用程序内部(即在安全环境中)调用适当的 Twitter Web API 来请求不记名令牌。

这样,您将拥有三个参与者,即您的移动应用程序、您的网络应用程序和 twitter 服务。移动应用程序从您的 Web 应用程序请求不记名令牌。 Web 应用程序通过 twitter REST API 进行服务器到服务器调用,从 twitter 请求不记名令牌,您的令牌和秘密仍然属于您。不记名令牌由 twitter 返回到您的 Web 应用程序。然后,您的 Web 应用可以将不记名令牌存储在您的 Web 应用会话中,并充当对 twitter 的请求的代理,并确保即使不记名令牌也保持机密。

以下是一些参考资料: http://wickedlysmart.com/twitternews-oauth/ https://dev.twitter.com/oauth/application-only http://hayageek.com/login-with-twitter/

【讨论】:

  • 网络很简单。问题在于使用 Twitter 登录或从移动应用发送推文。
【解决方案2】:

防止用proguard工具反编译

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

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

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

【讨论】:

  • 混淆不会混淆文本中的字符串或数字,如果它们确实需要应用程序使用?必须存储它们,以便应用代码可以访问它们以使用它们。
猜你喜欢
  • 2011-10-13
  • 2011-09-08
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2013-07-04
  • 2014-08-23
  • 2012-09-28
相关资源
最近更新 更多