我打算使用JSON来实现客户端服务器通信。我的目标是让Java服务器通过来自Iphone-app的HTTP-Post接收数据。JSON:拒绝来自第三方的服务器请求
我担心的我怎么能肯定的事实,即Java的服务器只接收的数据来自于iPhone的应用程序?其他人可能会捕获Java-Server URL并发送操纵数据?
我有机会认识到这一点吗? SSL仅对传输的数据进行加密,但我认为不能解决问题。
亲切的问候
stormsam
我打算使用JSON来实现客户端服务器通信。我的目标是让Java服务器通过来自Iphone-app的HTTP-Post接收数据。JSON:拒绝来自第三方的服务器请求
我担心的我怎么能肯定的事实,即Java的服务器只接收的数据来自于iPhone的应用程序?其他人可能会捕获Java-Server URL并发送操纵数据?
我有机会认识到这一点吗? SSL仅对传输的数据进行加密,但我认为不能解决问题。
亲切的问候
stormsam
你可以使用公共密钥加密,具有自己的钥匙和你保持跟踪谁是合法的用户。这是我能想到的最可靠的方案。那,或给每个用户一个用户名和密码。但是,这可能比它的价值更麻烦,但仍不能防止已注册但仍然存在恶意的用户。
嵌入在应用程序中的令牌,然后用请求发送时,如塞浦路斯暗示,可能是最简单的方案,并可能会工作得很好,但可能会比较容易进行逆向工程。
是个较好的解决方案可能是编入您的应用程序能够将任何给定的输入到输出的功能;然后,您的服务器通过向应用程序提供一段数据进行转换并检查结果来响应请求。通过测试的客户端会获得会话令牌,以允许其继续进行。不过,这确实需要额外的往返身份验证。而且对于反向工程来说,它仍然是不可避免的,因为所有需要的信息都存储在用户计算机上的应用程序中。
假设你可以合理地保护您的iOS应用被dissambled,你可以使用"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预防令牌,并且不需要加密请求和响应(只要你只关心完整性的要求,而不是保密)。
您可能需要看一看this。它可能会给你一些方向。
对于iPhone,您可以将udid发送到网络服务器,以便它能够检测到udid是否具有一定的价值,这意味着此请求来自iPhone,否则不是 – dark