iOS偶尔发送旧cookie

时间:2017-05-23 21:04:28

标签: ios authentication cookies mobile-safari sfsafariviewcontroller

我有一个应用程序可以定期轮换身份验证令牌cookie值。

每次服务器旋转令牌时,它都不会将其标记为" good"直到它看到客户端有令牌(因为客户端将其包含在资源的请求头中)。

我在iOS(10.3)上有一个非常具体的情况,偶尔会在网络状况发生变化时发送一个非常旧的cookie(例如:下车)。当这种情况发生时它会忘记"忘记"关于最近的cookie值和"开始生活在过去"和发送和旧的价值。

log

**安全说明:IP地址在纽约市公开分配t-mobile,令牌早已从我们的数据库中删除

  • 这是一个已知问题吗?
  • 对于在iOS上更强大的Cookie处理,是否有任何变通方法? localstorage不是理想的因为这些cookie只是http。

澄清......这是流程:

  1. 客户端(iOS Safari)有一个名为$mgClient->sendMessage($domain, array( 'from' => 'XY<webmaster@xy.com>', 'to' => 'XY<xy@xy.com>', 'subject' => trans('content.subject_confirm_event_registration'), 'html' => view('some.template', $data)->render() 'o:deliverytime' => Carbon::now()->hours(2)->toRfc2822String() )); 的Cookie,其值为_t
  2. 客户端(iOS Safari)向服务器发出请求
  3. 我们发出old并将Set-Cookie Cookie设置为新值_t(仅限http,安全Cookie)
  4. 客户使用新的Cookie值new发出另一个请求。我们标记cookie值很好并且客户端拥有它。
  5. 时间过去了
  6. 客户使用值为new
  7. _t Cookie发出请求

5 个答案:

答案 0 :(得分:3)

以下是我对发生的事情的理论:

从Cookie生命周期开始,每当用户身份验证状态发生变化时(登录用户 - >退出用户||登出用户 - >登录用户),旧cookie将被无效并替换为新的cookie。

但为什么会发生在地铁而不是其他地方呢?
1.现在大多数地铁都提供免费的无担保WiFi,以补充地下不良的无线网络连接。
2.在10.3中有一些关于网络连接问题的报告   this one特别有意思,因为问题是location dependent
3.我认为上述(1)和(2)的组合导致应用程序重新验证服务器。也许你可以拉日志来检查是否确实如此?

可能的解决方法?

也许没有。
我们无法阻止iPhone用户进行iOS升级。大多数人已经做到了。
此外,重新认证后不更改cookie的安全性影响更严重。


根据截至05/31/2017的评论进行更新:


鉴于评论中的详细信息。我们可以有更好的解释
在cookie生命周期中,当用户注销时,server-side-invalidation应该发生   
工作流程:
 1.当用户logout时,从浏览器中删除authenticated sessionID
但这还不够。服务器也需要invalidate sessionID。否则可能会出现安全反响。
3.在您的情况下,服务器可能无效。因此,它仍然期望SessionID已经deleted from the browser

这只是一种可能的解释。确切地说,需要更多详细信息日志文件分析和更多实验
例如,在那段时间内,在服务器日志中是否发生了重新认证?
如果server-side-invalidation已正确实施,我们能否在受控环境中进行测试?

答案 1 :(得分:1)

我的经历

我还使用随每个请求更改的ID进行身份验证,并存储在Cookie中。 我可以确认这种行为,它仍然存在于iOS 11(和iOS 11.1 beta 3)中。在我的日志文件中,我可以看到有时旧的cookie随机存储在Safari中。当关闭并重​​新打开时,会在独立的webapp中发生这种情况。

我的后备法

我在localStorage上构建了一个回退方法。带有旧cookie的请求通常会将我数据库中的所有数据标记为无效。如果用户代理指向具有iOS的设备,则不会将数据标记为无效,并且会再次尝试对客户端进行身份验证。

在客户端,我检查localStorage并使用此数据创建新的cookie。随后,进行新的认证。对于每个请求,localStorage都会像cookie一样被重写。如果身份验证再次失败,我会将数据标记为无效。

答案 2 :(得分:0)

Safari View Controller不再与iOS 11及更高版本的Safari共享Cookie,此更改解决了困扰iOS的Cookie存储损坏问题。自iOS 11发布以来,我们还没有遇到过这个问题。

答案 3 :(得分:0)

这可能是由自动重试引起的吗? 这些帖子提到在恶劣的网络条件下(例如您所说的地铁)可能会发生这种情况:

https://medium.com/@fagnerbrack/the-day-a-bug-was-fixed-only-because-the-ceo-called-in-f653a34079eb

https://blogs.oracle.com/ravello/beware-http-requests-automatic-retries

答案 4 :(得分:-2)

SQLite数据库,如果你愿意牺牲一点安全性。