繁体   English   中英

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

[英]Secure Communication Between iPhone and Server?

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

没有用户身份验证。

编辑:

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

这个怎么样:

我请求与设备UDID的会话,我得到一个握手密钥。

<handshake>23354</handshake>

从该字符串开始,根据约定的算法在服务器和客户端上计算密码(只需要很难重建)

让我们说现在我将1添加到握手键

password = 23354

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

你怎么看?

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

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

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

请客户提出以下要求:

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM