【问题标题】:Determining if a request came from an iPhone app确定请求是否来自 iPhone 应用程序
【发布时间】:2012-02-17 16:00:38
【问题描述】:

我有一个与服务器通信的 iPhone 应用程序(我拥有这两个服务器并为其编写了代码)。我需要确定服务器上的请求是否来自 iPhone(或任何运行我为此编写的应用程序的移动设备)。基本上,我只想允许我编写的应用程序与服务器通信,并且需要一种方法来验证这一点。由于我正在编写应用程序,因此我可以修改标题以及不需要的任何方式。

我阅读了一些关于公钥加密的内容,但我认为它不起作用。如果我在我的标头中发送某种秘密的散列字来验证它,某些外部方不能简单地获取这些标头并在他们的请求中使用相同的标头吗?

【问题讨论】:

    标签: iphone encryption verification public-key-encryption


    【解决方案1】:

    您可以使用校验和。假设您有类似的东西: 日期 主题

    并通过使用计算校验和,比如说(日期+“字符串”+主题)的MD5, 并且您在服务器上以相同的方式计算 MD5。如果它们匹配,则它们来自移动客户端。

    这将一直有效,直到有人弄清楚你的算法。

    【讨论】:

    • 嗯,可以。日期必须准确到当天左右,否则它们永远不会匹配,因为您不知道请求需要多长时间。
    • 不要忘记您可能还需要考虑不同的时区,这可能会给出不同的日期。最好使用 UTC。
    【解决方案2】:

    您可以让服务器向您的应用发送一条包含随机代码的消息。每次发送此消息和代码都会更改。

    然后,您的应用程序对该消息执行某种算法以“加密”它并将其发送回服务器,然后服务器可以对其进行检查。这样一来,在不知道您的“加密”的情况下就没有任何东西可以拦截和使用。

    当然,他们可以截获来自各个方向的消息,然后制定出你的算法,但如果你把它变得足够困难,那就需要一段时间了。

    【讨论】:

    • 这是一种有效的方法,但请求来自应用程序。为此,我必须让应用程序请求代码,对响应做一些事情,然后再向服务器发出另一个请求,这可能是很多不必要的通信。不过,如果我需要它比 @Zyberzero 的响应更安全,这可能是最好的。
    【解决方案3】:

    您可以只使用 HTTP 基本身份验证,除非您需要更安全的东西。

    【讨论】:

    • 由于我正在尝试做的事情,它比这更复杂一点。所有请求都以相同的方式进行身份验证,但我还需要确定请求的来源是否有意义。
    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2017-05-29
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    相关资源
    最近更新 更多