我有一个应用程序可以定期轮换身份验证令牌cookie值。
每次服务器旋转令牌时,它都不会将其标记为" good"直到它看到客户端有令牌(因为客户端将其包含在资源的请求头中)。
我在iOS(10.3)上有一个非常具体的情况,偶尔会在网络状况发生变化时发送一个非常旧的cookie(例如:下车)。当这种情况发生时它会忘记"忘记"关于最近的cookie值和"开始生活在过去"和发送和旧的价值。
**安全说明:IP地址在纽约市公开分配t-mobile,令牌早已从我们的数据库中删除
澄清......这是流程:
$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
old
并将Set-Cookie
Cookie设置为新值_t
(仅限http,安全Cookie)new
发出另一个请求。我们标记cookie值很好并且客户端拥有它。 new
_t
Cookie发出请求
醇>
答案 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数据库,如果你愿意牺牲一点安全性。