[英]Secure Communication Between iPhone and Server?
我正在开发一个连接到基于XML的API的应用程序。 我可以控制服务器和应用程序 - 有什么方法可以确保只有我的应用程序才能访问API?
没有用户身份验证。
编辑:
主要担心的是机器人通过扫描XML来窃取数据。
这个怎么样:
我请求与设备UDID的会话,我得到一个握手密钥。
<handshake>23354</handshake>
从该字符串开始,根据约定的算法在服务器和客户端上计算密码(只需要很难重建)
让我们说现在我将1添加到握手键
password = 23354
在所有API调用中,我然后将此密码与UDID一起传递。 这将允许服务器将每个会话限制为一定数量的呼叫,不是吗?
你怎么看?
假设您可以控制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.