3

我的 iOS 应用程序中有一些代码,如下所示:

URL *url = [NSURL URLWithString:@"http://urltomyapp.com/createaccount"];
ASIFormDataRequest *createAccountRequest = [ASIFormDataRequest requestWithURL:url];
[createAccountRequest setPostValue:email forKey:@"email"];
[createAccountRequest setPostValue:password forKey:@"password"];
[createAccountRequest startAsynchronous];

在我的服务器实现中,我只是通过 self.request.get('email') 获取这些信息并创建一个帐户,而不做任何检查或任何事情。但是,似乎任何人都可以轻松运行上面的代码(我的意思是您需要做的就是复制上面的代码并将其放入您自己的应用程序中,对吧?),他们只需要知道服务器地址,他们可以将任何他们想要的数据附加到请求中,服务器会继续为他们创建一个帐户。

我将如何授权请求以知道它们来自我的应用程序并且仅来自我的应用程序?这是一个普遍的担忧吗?其他产品如何防止这种情况?

4

2 回答 2

2

使用 HTTPS 并在您的应用程序中放置一个证书以验证允许客户端与您的服务器通信。

但相信我,这真的不值得。单独使用 HTTPS 通常是可以的。

于 2012-09-01T11:48:41.670 回答
2

首先,免责声明。我当然不是网络专家,也不是安全专家。事实上,我回答的唯一原因是因为 stackmonster 的回复中的讨论。

但是,我确实知道拦截 SSL 连接非常容易,尤其是在用户同谋的情况下。

不过,总的来说,我认为以下内容是有一些好处的。

您必须确定您要保护的对象/内容。如果你只是想保护应用程序和服务器之间通信中的数据,https 就可以了。外部窥探将与窥探其他 SSL 流量一样有效(或无效)。

但是,如果您试图保护您的 API(您的问题似乎暗示了这一点),那么用户查看您发送的命令是微不足道的(正如您自己通过使用 Charles 发现的那样)。

那么,您想防止任何人知道您的 API 的详细信息吗?您是只想防止 DOS 攻击,还是只让有效用户发出命令,还是什么?

然后,您可以担心身份验证和授权(两个不同的主题)。也许验证请求来自已知实体就足够了。

无论如何,提供指导非常困难,因为您首先必须确定您的网络隐私目标是什么。

然后,如果他们很崇高,那么你就需要大量阅读。

但是,在某些时候,您必须决定什么对您的应用程序/业务至关重要,什么不是。就像任何好的软件设计一样,然后创建一组需求。然后,按某种顺序对它们进行优先级排序(例如,强制性的、必不可少的、很高兴拥有、可以没有)。

这将告诉您是否需要额外的安全性,以及需要什么样的安全性。

然而,大多数人发现,即使锁上所有的门并堵住窗户,也不值得花时间和投资(更不用说保护烟囱,在墙壁、地板和天花板上加混凝土,建造安全室和雇用武装警卫)。

于 2012-09-01T16:55:01.123 回答