【问题标题】:Android Server Communication SecurityAndroid 服务器通信安全
【发布时间】:2016-10-14 16:10:05
【问题描述】:
几天前,有人反编译了我的应用程序,并在我的源代码中显示了一个问题。我在应用程序的源代码中硬编码了我的服务器的链接和密码,我不知道通过反编译任何人都可以看到我的源代码。我使用 proguard 但 proguard 不会混淆字符串。这让我想知道如何正确地做到这一点?我的应用程序如何进行 api 调用并且服务器可以对其进行身份验证?我做了一项研究,但我没有看到太多关于这个的内容。我的应用程序不管理用户和密码。我存储在代码中的用户名和密码是登录服务器的用户名和密码。
【问题讨论】:
标签:
android
api
server
decompiling
source-code-protection
【解决方案1】:
是的,很容易看到反编译的 Java 代码来获取密钥等。
有几件事要做:
确保“应用程序密钥”或“令牌”不是具有深度管理员权限的机密。许多 SaaS / API 提供商为您提供多个密钥。一种是在可以执行的权限/操作方面受到限制的客户端密钥,以及具有更多权限但不会通过客户端代码泄露的服务器密钥。在您的情况下,您不应该共享相同的服务器登录/管理员密码。利用最小权限原则 (https://en.wikipedia.org/wiki/Principle_of_least_privilege)
确保字符串是静态final。在这种情况下,编译器和 Proguard 允许字符串内联。这使得知道字符串的用途有点困难。如果你有一个“配置”类,那么在 facebookAppId、“秘密”googleSecret 等中搜索“facebook”非常容易。
为了真正安全,您可以对字符串执行一些加密或其他算法,但这意味着您还将加密密钥也存储在代码本身中。
一般来说,我相信 (1) 提供的最多,因为您应该始终假设客户端中的任何字符串都可以被找到/破解,无论是带有 Proguard 的 Android/Java 还是缩小的 javascript。