我打算使用JSON来实现客户端和服务器的通信。我的目标是让Java服务器通过HTTP-Post从Iphone应用程序接收数据。
我担心的是,我如何才能确定Java服务器接收的数据只来自Iphone应用程序?其他人可能正在捕获Java-Server URL并发送被操纵的数据?
我有机会认出这一点吗?SSL只加密传输的数据,但我认为并不能解决这个问题。
亲切的问候
stormsam
发布于 2011-09-01 03:28:25
您可以发送一个硬编码到应用程序中的令牌。所有没有这个有效toke的东西都应该被拒绝。或者,您可以使用.htaccess并在您的应用程序中指定用户和密码。
发布于 2011-09-01 03:43:06
您可以使用公钥加密,用户拥有自己的密钥,您可以跟踪谁是合法用户。这是我能想到的最可靠的方案。或者给每个用户一个用户名和密码。然而,它的麻烦可能比它的价值多得多,并且仍然不能保护那些已经向你注册但仍然是恶意的用户。
正如Cyprian建议的那样,在应用程序中嵌入令牌,然后将其与请求一起发送,可能是最简单的方案,并且可能工作得很好,但可能相对容易进行反向工程。
一个更好的解决方案可能是在您的应用程序中编写一个函数,该函数将任何给定的输入转换为输出;然后,您的服务器通过向应用程序提供一段要转换的数据来响应请求,并检查结果。通过测试的客户端将获得允许其继续进行的会话令牌。不过,这确实需要额外的身份验证往返。而且它仍然不能幸免于逆向工程,因为所有需要这样做的信息都存储在用户机器上的应用程序中。
发布于 2011-09-01 03:48:03
假设你可以合理地保护你的iOS应用程序不被破坏,你可以使用"signed requests" like the Facebook API (可能还有其他的):
您需要在客户端和服务器端都使用共享密钥(例如,随机字符串/字节数组)。然后,iOS应用程序对所有请求参数加上共享密钥进行散列,并将散列附加为额外的请求参数,例如myserver.com/ws?item=123&cat=456变为myserver.com/ws?item=123&cat=456&hash=1ab53c7845f7a。收到请求后,服务器根据常规参数和共享密钥重新计算散列,并将其与value sig参数进行比较。如果两者相等,则认为该请求有效(假设您的iOS应用程序是完整的)。
这种方法的一个优点是,它不需要额外的往返来获取任何一次性/CSRF预防令牌,也不需要加密请求和响应(只要您只关心请求的完整性,而不是机密性)。
https://stackoverflow.com/questions/7262299
复制相似问题