JSON:拒绝来自第三方的服务器请求

时间:2011-08-31 19:24:09

标签: java iphone json

我打算使用JSON来实现客户端服务器通信。我的目标是让Java服务器通过Iphone-app的HTTP-Post接收数据。

我很关心如何确定Java服务器收到的数据只来自Iphone-app?其他人可能正在捕获Java-Server URL并发送绑定数据?

我有机会认识到这一点吗? SSL认为,SSL仅对传输的数据进行加密,但不能解决问题。

亲切的问候

stormsam

4 个答案:

答案 0 :(得分:1)

您可以将硬编码的令牌发送到您的应用程序中。没有这个有效的toke的所有东西都应该被拒绝。或者您可以使用.htaccess并在应用中指定用户和密码。

答案 1 :(得分:0)

您可以使用公钥加密,用户拥有自己的密钥,并且您可以跟踪谁是合法用户。这是我能想到的最可靠的方案。那,或给每个用户一个用户名和密码。但是,它可能比它的价值更麻烦,并且仍然无法防止已向您注册但仍然是恶意的用户。

如您所希望的那样,在您的应用程序中嵌入一个令牌然后发送请求可能是最简单的方案,可能会很好,但可能相对容易进行逆向工程。

更好的解决方案可能是在应用程序中编写一个将任何给定输入转换为输出的函数;然后,您的服务器通过向应用程序提供要转换的数据来响应请求,并检查结果。传递测试的客户端获取会话令牌,允许其继续。但这确实需要额外的往返认证。并且它仍然不能免于逆向工程,因为所需的所有信息都存储在用户机器上的应用程序中。

答案 2 :(得分:0)

假设您可以合理地保护您的iOS应用免遭诽谤,您可以使用"signed requests" like the Facebook API(可能还有其他人):

您需要在客户端和服务器上共享密钥(例如随机字符串/字节数组)。 iOS应用随后哈希所有请求参数加上共享密钥,并附加哈希作为附加请求参数,例如myserver.com/ws?item=123&cat=456变为myserver.com/ws?item=123&cat=456&hash=1ab53c7845f7a。收到请求后,服务器会重新计算常规参数和共享密钥的哈希值,并将其与值sig参数进行比较。如果两者相等,则认为该请求有效(假设您的iOS应用程序完整)。

此方法的一个优点是不需要额外的往返来获取任何一次性/ CSRF预防令牌,并且不需要加密请求和响应(只要您只有关心请求的完整性,而不是机密性。)

答案 3 :(得分:0)

您可能需要查看this。它可能会给你一些指示。