iPhone和服务器之间的安全通信?

我正在开发一个连接到基于XML的API的应用程序。 我可以控制服务器和应用程序 - 有什么方法可以确保只有我的应用程序可以访问API吗?

没有用户认证。

编辑:

主要担心的是机器人通过扫描XML来窃取数据。

这个怎么样:

我使用设备UDID请求会话,并获得握手密钥。

<handshake>23354</handshake>

从这个字符串中根据一致的算法在服务器和客户端上计算密码(它必须很难重建)

现在让我们说,我将1添加到握手密钥

password = 23354

在所有API调用中,我随后将此密码与UDID一起传递。 这将允许服务器将每个会话限制到一定数量的呼叫,不是吗?

你怎么看?


不,不可能确保只有您的应用可以联系您的服务器。 有些混淆技术可以提高攻击者的攻击力,而这些技巧对大多数攻击者都有效。 您的潜在问题对于专门的攻击者来说是不可解决的。 您可以在iPhone上找到有关此主题的其他帖子列表:如何加密字符串。 您可以在这些帖子中使用几种技巧,并讨论如何以及是否应该攻击潜在问题。


假设您可以控制XML API,您可以提供一个快速挑战响应机制。

生成一个数字并将其包含在您的应用程序和服务器端。 在客户端和服务器上使用它作为srand()的种子。

请求客户的请求包含如下内容:

<handshake id="123">12312931</handshake>

id表示123'rd生成的随机数,12312931表示调用rand()123次后的值。 值123应该是随机生成的数字(由不同的种子生成!)。

这不是一个简单而有效的挑战反应,但它不仅仅依赖于基本的ANSI C库集。

请注意,它不是非常安全的 - 所有人都必须做的是让你的客户挑战他们自己的服务器,然后为每个种子值生成(在这个例子中)123'rd的随机数,直到他们找到它。 所以我不会使用它期望它提供加密级别认证或访问控制。 它只是提供了一个简单而且非常简单的实施方式,非常简单。


您可以使用某种签名来验证确实是您的应用正在发起呼叫,您只需计算服务器端和应用端的签名,只要它们匹配,服务就会返回并响应请求。 典型的签名是由你的函数的一些参数组成的,然后是一个秘密密钥,然后取得它的md5哈希值并通过它。 在请求中,没有人能够找到秘密密钥,因为它在md5哈希中。

链接地址: http://www.djcxy.com/p/43097.html

上一篇: Secure Communication Between iPhone and Server?

下一篇: Can I change a web service reference URL in the Config file?