Objective-C - 如何在应用终止时阻止会话ID重用?

时间:2016-05-31 10:53:43

标签: ios objective-c security session-hijacking

我的主要问题是如何在最终用户处于后台(暂停)时检测应用程序终止,以便能够向服务器发送注销请求?

我们已经在服务器中有一个超时间隔来终止会话,但是假设时间间隔是5分钟,这意味着在用户终止应用程序之后会话将处于活动状态5分钟,任何人都可以嗅探数据并重复使用它。

注意:

  • 我们使用HTTPS连接和SSL证书培训。

  • 我们还实施了一个心跳Web服务,每隔一段时间由客户端app调用,告诉服务器在此时间间隔内保持会话活动,如果此Web服务没有调用特定会话,服务器将杀了这个会议。

2 个答案:

答案 0 :(得分:1)

暂停您的应用后,您不会在终止前获得进一步通知。没有办法做你想要的。

另外,用户可以暂停您的应用程序以执行其他操作(例如玩游戏),然后不再返回您的应用程序进行DAYS。

如果您想在用户离开应用时退出,请在willBeSuspended消息上执行此操作。要求更多的背景时间,然后在那里发送注销。

答案 1 :(得分:1)

Mohamed Amer,

以下是Quickblox Server使用的方法,虽然它涉及一点点开销,但我觉得它非常可靠。

一旦客户端应用程序(iOS android)与quickblox服务器建立会话,quickblox服务器希望客户端应用程序在定期间隔后连续向服务器发送状态信息。

发送presense信息非常简单。他们写了一个api,经过我们有会话ID的5分钟间隔后我们继续打。他们验证会话ID,一旦发现有效,他们将延长与该ID相关的用户的到期时间,延长5分钟。

他们会做什么,我相信是,

方法1:他们维持最后一次点击时间,对于所有后续请求,他们检查请求时间是否在5分钟的时间范围内,如果是,则只需处理它。如果请求在5分钟后发出,他们将删除该用户的会话ID并回复说您已超时该会话。

方法2:因为它们提供了在线和离线信息,所以它们只能依赖于传入的请求从服务器中删除会话ID,因此它们可能会创建一个后台线程来刷过db到找到上次命中时间大于5分钟的条目,并将其从DB中删除。并声明用户会话已过期。

虽然这涉及客户端应用程序不断点击服务器并增加应用程序服务器的负担,如聊天应用程序,其中presense信息是如此重要,这个开销仍然很好,我相信。

希望我至少为你提供了一些想法:)