如何防止未经授权的HTTP请求?

时间:2012-09-01 11:39:35

标签: ios http authorization

我的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')获取此信息并创建一个帐户,而不进行任何检查或任何操作。但是,似乎任何人都可以轻松运行上面的代码(我的意思是你需要做的就是复制上面的代码并把它放到你自己的应用程序中,对吗?),他们需要知道的只是服务器地址,他们可以将他们想要的任何数据附加到请求,服务器将继续为他们创建一个帐户。

我如何授权请求知道它们仅来自我的应用和我的应用?这是一个共同的问题吗?其他产品如何防范这种情况?

2 个答案:

答案 0 :(得分:2)

使用HTTPS并在您的应用中放置一个证书,以验证客户端是否可以与您的服务器通信。

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

答案 1 :(得分:2)

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

但是,我知道拦截SSL连接非常容易,特别是如果用户是同谋的话。

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

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

但是,如果您正在尝试保护您的API(您的问题似乎暗示了这一点),那么用户可以轻松查看您要发送的命令(正如您自己通过使用Charles发现的那样)。

那么,您是否希望阻止任何人了解您的API的详细信息?你想只是阻止DOS攻击,还是只让有效用户发出命令,或者是什么?

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

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

然后,如果他们是崇高的,那么你就是在阅读。

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

这将告诉您是否需要额外的安全性,以及那种安全性。

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