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

问题描述 投票:0回答:5

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

没有用户身份验证。

编辑:

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

这个怎么样:

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

<handshake>23354</handshake>

根据商定的算法,从该字符串在服务器和客户端上计算出密码(它必须难以重建)

现在假设我在握手密钥上加1

password = 23354

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

你觉得怎么样?

ios xml security screen-scraping
5个回答
3
投票

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


2
投票

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

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

让客户的请求包含以下内容:

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

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

这不是一个万无一失的挑战响应,但它简单高效,并且除了基本的 ANSI C 库集之外不依赖任何其他东西。

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


1
投票

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


0
投票

通过带有身份验证的 https 访问您的 Web 服务。


-2
投票

我认为您需要问的真正问题是您的数据面临攻击的风险有多大。我想说,99% 的情况下,您只需要一个难以猜测的模糊 URL 就可以了,因为普通用户尝试在应用程序之外使用它执行任何操作的机会很小。如果您担心竞争对手窃取您的信息,我建议采取一些更邪恶的措施:

在您的应用程序中进行设置,以便您的应用程序和服务器经常(也许每两周)更改一次 URL。然后,如果有人确实尝试访问您的 XML API,他们将持续不断地寻找您的 URL。锦上添花的是,保持旧 URL 处于活动状态,但让它们返回错误数据。我想你可以发挥你的想象力,从这里弄清楚剩下的事情。

© www.soinside.com 2019 - 2024. All rights reserved.