【问题标题】:Block non-Android users calling JSON service阻止非安卓用户调用 JSON 服务
【发布时间】:2010-11-05 06:39:39
【问题描述】:

我的 Android 应用程序正在通过 HTTP 调用 JSON 服务,我希望只允许我的应用程序调用该服务并阻止其他应用程序。

最好的方法是什么?

我能想到的一种方法是使用私钥/公钥加密。我们可以在应用程序中安全地嵌入私钥吗?

【问题讨论】:

    标签: android web-services json encryption


    【解决方案1】:

    在您的应用中包含一些隐藏的证书/凭证,每个下载的应用都不同。然后使用这些进行身份验证。即便如此,这很容易被滥用,但你已经建立了第一道防线。

    之后,尝试根据IP、凭据等,对单个客户端可以根据需要请求、限制和黑名单的比例进行限制。

    【讨论】:

    • "在您的应用程序中包含一些隐藏的证书/凭证,每个下载的应用程序都不同。"你介意详细说明一下吗?您是否有任何示例或链接来说明如何做到这一点?
    • 嗯,我的意思很笼统。隐藏它们的唯一原因是它们不会混淆用户。考虑一个带有散列的非常标准的用户名/密码方案,唯一不同的部分是凭据被隐藏,并自动发送到服务器。这有助于使系统更加重要,并且更容易跟踪进攻可能来自哪里。如果您想进一步改进这一点,您可以添加加密和/或证书,以便在后台发送。您真正感兴趣的是尽可能以各种方式跟踪使用情况。
    【解决方案2】:

    一旦您分发了您的应用程序,它就可以被反汇编。因此,可以提取和重用与您的应用程序一起分发的私钥。

    没有完全安全的方式来做你想做的事情。但是有一些方法可以限制客户端,即使它们不是万无一失的。

    最简单(也是最不安全)的方法是根据用户代理限制访问。但是任何客户端都可以伪造用户代理。

    证书/加密解决方案更强大,但如上所述,证书可以从您的应用中提取。

    某些应用程序在与您的应用程序相同的上下文中使用 OAuth。但 OAuth 不是为桌面(或移动)应用程序设计的,也容易受到应用程序逆向工程的影响。

    您可以验证用户身份(通过用户/密码或其他标准方法)。在这种情况下,您不会基于平台进行限制。然后,您可以关闭滥用您服务的用户的帐户。这是一个安全的解决方案,但不能完全解决您的问题。

    【讨论】:

    • 通过 HTTPS 的用户名/密码是当今唯一合理安全的方式。这是所有最大的在线服务(gmail、雅虎等)使用的。
    【解决方案3】:

    最简单的方法是使用带有身份验证的 HTTPS。

    已编辑:

    这里的问题不是如何保护对服务器的访问,而是如何在 Android 手机上隐藏/保护凭据(密码/证书/等)。问题应该是:如何在 Android 应用中隐藏数据。

    一种解决方案是使用像 ProGuard 这样的混淆器。

    【讨论】:

    • 这不是最简单的(这将是用户代理),而且远非安全。
    • JSON 服务不关心用户代理。用户代理仅在将 html 返回到浏览器时才有用。顺便说一句,您仍然可以使用 HttpClient 设置用户代理。
    • HTTPS 是安全的 - 外部各方无法窥探它。如果它使用用户名/密码进行身份验证,则其他人无法连​​接到它。
    • 但是可以通过将应用程序拆解成碎片来轻松获取凭据,并轻松使用它们。
    • 没有什么能阻止 JSON 服务关心用户代理。使用用户/密码将验证用户,而不是应用程序,或者如果您将其用于应用程序,则与私钥解决方案相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多