我不明白为什么session_regenerate_id连接低很危险?



我正在研究我网站的安全性,我会理解为什么session_regenerate_id应该谨慎使用。 在 php 手册文档 (https://www.php.net/manual/en/function.session-regenerate-id.php) 中,他们说:

目前,session_regenerate_id不能很好地处理不稳定的网络,例如移动和WiFi网络。因此,您可能会通过调用session_regenerate_id来体验会话丢失。

不应立即销毁旧会话数据,而应使用销毁时间戳并控制对旧会话 ID 的访问。 否则,对页面的并发访问可能会导致状态不一致,或者您可能丢失会话,或者可能导致客户端(浏览器)端争用情况,并可能不必要地创建许多会话 ID。立即删除会话数据也会禁用会话劫持攻击检测和预防。

我不明白为什么这个函数可能意味着失去连接。 我们向服务器发送请求,他更改 SID(使用旧值初始化 $_SESSION 并在save_file位置创建一个文件),以便他可以向客户端发送 cookie。

任何人都可以解释我在哪里可以丢失会话? 我真的很困惑,但我会理解这个问题以解决这个问题......

提前,谢谢大家:D

Ps :我也在 https://www.php.net/manual/en/function.session-regenerate-id.php 上回复了文档,我不明白第二个示例:

function my_session_start() {
session_start();
if (isset($_SESSION['destroyed'])) {
if ($_SESSION['destroyed'] < time()-300) {
// Ne devrait pas se produire habituellement. Cela pourrait être une 
// attaque ou en raison d'un réseau instable. Supprimez tout l'état 
// d'authentification de cette session utilisateurs.
remove_all_authentication_flag_from_active_sessions($_SESSION['userid']);
throw(new DestroyedSessionAccessException);
}
if (isset($_SESSION['new_session_id'])) {
// Pas encore complètement expiré. Pourrait être perdu cookie par réseau instable.
// Essayez à nouveau de définir le cookie d'ID de session approprié.
// Remarque: n'essayez pas de redéfinir l'ID de session si vous 
// souhaitez supprimer l'état d'authentification.
session_commit();
session_id($_SESSION['new_session_id']);
// Nouvel ID de session doit exister
session_start();
return;
}
}
}

为什么如果"time()-300"可能是攻击? 而且我不明白如果可能是网络问题,为什么我们应该删除会话......这将导致连接丢失没有?我不明白我们为什么要提出一个豁免?有人可以帮助我吗?

该文本试图说"如果设置了销毁的时间戳,并且该时间戳超过 5 分钟,那么可能有人拿到了 cookie 并试图劫持会话。如果不到 5 分钟,则可能只是用户遇到网络问题。 因此,如果是会话劫持,您希望删除会话并在某处记录错误。 如果只是网络问题,则需要更新会话。 还值得注意的是,示例代码缺少if ($_SESSION['destroyed'] < time()-300)块上的else

相关内容

  • 没有找到相关文章

最新更新