【问题标题】:Website API only for my android client网站 API 仅适用于我的 android 客户端
【发布时间】:2011-10-07 19:46:50
【问题描述】:

我想为我的网站开发一个安卓应用。一种方法是为网站创建一个 API,并让应用程序使用该 API。但是我希望这个 API ONLY 由我的 android 应用程序使用,我不希望任何其他客户端使用这个 API。

有没有办法确保这一点?

我可以想到一种方法:在应用程序中放置一个秘密,并让应用程序始终将此秘密传递给 API。但我不确定这种方法有多安全,因为任何数据包嗅探器都可以轻松嗅探参数并因此嗅探秘密。还有其他建议吗?

【问题讨论】:

    标签: android security


    【解决方案1】:

    我认为这与我几天前回答的问题类似。 Securing a REST API from Android

    也就是说,找到一种使用共享密钥验证所有请求的方法。

    如果你用秘密签署了路径和参数,那么应该没有人可以伪造请求。

    【讨论】:

      【解决方案2】:

      终于从安卓开发者的博客article得到了答案。

      【讨论】:

        【解决方案3】:

        简短的回答是否定的,对不起。如果有人真的想利用您的网站/api/设备/程序/在此处插入任何内容,并且他们有时间和资源,那么他们会的。

        要直接回答您的问题,将密钥放入您的应用程序并不安全,因为任何人都可以反编译应用程序并尝试从源文件中重建密钥,他们不需要嗅探流量。

        【讨论】:

        • 我对此很感兴趣。我对Java知之甚少,但是在混淆和编译之后,你真的可以反编译和提取它吗?我希望看到一些带有示例的博客文章。
        • @MatthewRudy 反编译java类文件真的很容易。像 proguard 这样的混淆工具只是简单地重命名类和变量,使代码难以解释,但并非不可能。此外,字符串文字最终是人类可读的,因此通常很容易通过代码查找可能看起来是 API 密钥的内容。
        • 有趣。我用一个例子找到了this article。看起来不太好。
        • 我看到我们正在努力做的就是给应用程序逆向工程提供越来越多的阻力。可能最好的方法是编译为本机代码的繁琐方法(如@MatthewRudy 给出的链接中所述)。
        【解决方案4】:

        如果我错了,请纠正我!数据包嗅探器只能用于未加密的 WiFi 和(现在)罕见的网络配置(路由器或交换机阻止它们)。

        对于严重的问题,您应该考虑安全连接 (https)。

        也就是说,对于标准内容,我觉得密码足够安全。许多流行的网络应用程序只使用通过 http 的 cookie 来让您登录,这正是您所提议的。

        【讨论】:

        • 数据包嗅探器可以拦截网络上的任何数据包加密与否,wifi与否。加密只会改变数据包中数据的存储方式。您实际上在这里引用了两种不同类型的加密。加密wifi意味着你和路由器之间的数据包是加密的。 Https意味着您与网站之间的数据是加密的。两者都是半安全的,并且都被证明是易碎的。到底没有完美的加密算法。
        【解决方案5】:

        我在这个问题上苦苦挣扎,实际上我最终实现了一个版本的 OAuth 来保护我的 API。如果您不启动浏览器来执行 OAuth 的“登录”部分,可能会很困难。我将登录信息直接嵌入到我的应用程序中,并在后台实际实现了令牌交换。在这里发布代码涉及太多,但效果很好。显然,HTTPS 需要额外的安全级别。

        【讨论】:

          【解决方案6】:

          如果您可以从您自己的应用程序的包管理器中获取某种签名,您可以使用混淆来希望使其变得更加困难,并让来自包管理器的签名/散列签名成为您 HMAC 的关键- SHA1。

          可能要试试这个(How to get APK signing signature?

          如果你这样做了,它会更难使用。显然,它仍然可以被反编译,但如果他们用调试等重新编译它,它就会有错误的密钥。然后,他们必须在有根设备上创建自己的包管理器才能获得签名。

          【讨论】:

          • 唯一的问题是,任何人都可以获得您签名的哈希值。因此,除非您将其传递到一些代码中以进一步混淆它,否则它很容易被破坏。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-21
          • 2014-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多