gpt4 book ai didi

php - session 重新生成导致具有快速 AJAX 调用的 session 过期

转载 作者:可可西里 更新时间:2023-10-31 22:15:46 25 4
gpt4 key购买 nike

我的应用程序是一个使用 Codeigniter 框架和 memcached session 处理程序的完整 AJAX 网页。

有时,它会发送大量异步调用,如果 session 必须重新生成其 ID(以避免 session 固定安全问题), session cookie 的更新速度不够快,一些 AJAX 调用会因 session ID 过期而失败。

这是我为清楚地显示问题而制作的示意图: enter image description here

我遍历了类似的线程(例如 this one),但答案并没有真正解决我的问题,我无法禁用安全性,因为我的应用程序中只有 AJAX 调用。

尽管如此,我有一个想法,我想在侵入 Codeigniter session 处理程序类之前征求意见:这个想法是在一段时间内管理 2 个同时的 session ID,例如 30 秒。这将是最大请求执行时间。因此, session 重新生成后,服务器仍然会接受之前的 session ID,并切换到新的 session 。使用相同的图片会给出这样的结果:

enter image description here

最佳答案

首先,您提出的解决方案是非常合理的。事实上,the people at OSWAP只是建议:

The web application can implement an additional renewal timeout after which the session ID is automatically renewed. (...) The previous session ID value would still be valid for some time, accommodating a safety interval, before the client is aware of the new ID and starts using it. At that time, when the client switches to the new ID inside the current session, the application invalidates the previous ID.

不幸的是,这不能用 PHP 的标准 session 管理来实现(或者我不知道该怎么做)。尽管如此,在 a custom session driver 中实现此行为1 应该不会造成任何严重的问题。

我现在要大胆声明:定期重新生成 session ID 的整个想法被打破了。现在不要误会我的意思,在登录时重新生成 session ID(或更准确地说,as OSWAP put it,在“特权级别更改”时)确实是对 session fixation 的一个很好的防御。 .

但是定期重新生成 session ID 带来的问题多于它解决的问题:在两个 session 共存的时间间隔内,它们必须同步,否则就有丢失来自即将到期的 session 的信息的风险。

针对简单的 session 窃取有更好(也更容易)的防御措施:使用 SSL (HTTPS)。定期 session 更新应视为the poor man's workaround到这个攻击向量。


1 link to the standard PHP way

关于php - session 重新生成导致具有快速 AJAX 调用的 session 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38373207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com