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

时间:2009-09-09 11:44:26

标签: iphone api

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

没有用户身份验证。

编辑:

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

这个怎么样:

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

<handshake>23354</handshake>
从该字符串

根据约定的算法在服务器和客户端上计算密码(只需要很难重建)

现在假设我在握手密钥中添加1

password = 23354

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

您怎么看?

5 个答案:

答案 0 :(得分:3)

不,无法确保只有您的应用可以与您的服务器联系。有一些混淆技术可以提高攻击者的攻击力,这些技术对大多数攻击者都有效。对于专门的攻击者而言,您的潜在问题无法解决。您可以在iPhone: How to encrypt a string找到有关此主题的其他帖子列表。您可以在这些帖子中使用几种技术,并讨论如何以及是否应该攻击潜在问题。

答案 1 :(得分:2)

假设您可以控制XML API,则可以提供快速质询响应机制。

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

请客户提出的请求包括:

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

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

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

请注意,它也不是非常安全 - 所有人都要做的就是让你的客户挑战他们自己的服务器,然后为每个种子值生成(在这个例子中)第123个随机数,直到找到它为止。所以我不会用它来期望它提供加密级别身份验证或访问控制。它只是提供了一个简单易行的挑战响应,实现效率高且易于实现。

答案 2 :(得分:1)

您可以使用某种签名来验证确实是您的应用程序正在进行调用,您计算服务器端和应用程序端的签名,只有当它们匹配时,服务才会返回并响应请求。通常,签名由函数的一些参数组成,后跟一个密钥,然后获取该密钥的md5哈希值并通过它。在r equest中,没有人能够找到密钥,因为它在md5哈希中。

答案 3 :(得分:0)

通过https访问您的网络服务并进行身份验证。

答案 4 :(得分:-2)

我认为您需要问的真正问题是您的数据存在多大的攻击风险。我会说99%的时间你会很好,只是一个难以猜测的模糊URL,因为普通用户试图在你的应用程序之外做任何事情的机会很小。如果你担心竞争对手偷了你,我会建议一些更邪恶的东西:

在您的应用中,进行设置,以便您的应用和服务器每隔一段时间(可能每两周)更改一次网址。然后,如果有人确实试图访问您的XML API,那么他们将不断争夺您的网址。作为锦上添花,保持旧URL活跃但让它们返回错误的数据。我想你可以让你的想象力从这里开始,并从中找出其余部分。