【问题标题】:How to hide API Keys in Android如何在 Android 中隐藏 API 密钥
【发布时间】:2017-03-12 19:47:00
【问题描述】:

我正在创建一个通过 API 连接到服务器的 Android 应用。我担心安全问题,就我而言,任何人都可以反编译您的.apk 并查看或修改您的代码。

知道了,我需要将 API 密钥保存在应用程序的什么位置,以避免某些坏人窃取它并访问服务器,例如修改我的数据库?

谢谢

【问题讨论】:

    标签: android security


    【解决方案1】:

    了解攻击者将如何追踪您的应用程序,95% 的时间都按此顺序:

    1. 通过使用像Burp 这样的拦截代理来检查应用程序和服务器之间的流量——这很容易做到。看看我在 Words With Friends here 上是如何做到的(这适用于 iOS 设备,但同样的概念适用于 Android)。

    2. 您可以使用 certificate pinning 停止流量检查,但他们可以通过 root 设备并在 Android 上使用一些黑客工具来打破这种情况。所以你需要Android root detection

    3. 另一种攻击是扫描您的二进制文件。您需要使用 DexGuard 之类的工具对其进行混淆处理。

    这些方法都不是万无一失的:通常试图在客户端代码中隐藏秘密是losing game。不要付出超过其价值的努力。

    【讨论】:

    • 那么,存储用于连接服务器的 API 密钥的常见位置在哪里?
    • @Lopan 您可以在应用程序中对其进行硬编码,但您需要对代码进行模糊处理、进行证书固定并检测生根才能有机会。然而,更好的设计不会依赖于客户端的秘密,这是一场失败的游戏。
    • 感谢您的帮助,您知道一些有关如何为 Android 应用正确设置 REST API 的资源或书籍吗?对不起,如果我的问题让你觉得很愚蠢。
    • @Lopan,对不起,我没有太多。从安全的角度来看,在客户端代码中隐藏秘密是一场失败的战斗。如果您的应用程序有用户进行身份验证,那么您可以使用 Oauth 2(或更简单的东西,因为 Oauth 可能会过大)来限制对服务器上资源的访问。只是在谷歌上搜索这个主题,我没有找到任何好的资源,但 this onethis one 还可以。
    • 非常感谢您的帮助,我会在您的回答上打勾。