重新生成会话ID

Dmi*_*iyd 9 php security session

我正在考虑在每个页面上使用此代码以减少会话劫持的可能性.通过在每个请求上更新session_id

if(!empty($_session)){ 
   session_start(); 
}
Run Code Online (Sandbox Code Playgroud)

实现这一目标的另一种方法是:

if(!empty($_session)){ 
  session_regenerate_id(true);
}
Run Code Online (Sandbox Code Playgroud)

但是,我听到对该函数的批评,如果由于某种原因页面刷新太快,会话ID将变为无效.

使用会话ID的另一种方法是更多地控制会话的生成方式.

还有其他方法可以实现这一点.最佳做法是什么?

fir*_*ire 27

调用session_regenerate_id每一页都是不必要的开销.

您应该只在登录时或任何重新授权用户时调用它.

如果你想要额外的,你可以将最后一次重新生成的时间存储在一个会话中,然后session_regenerate_id在30分钟之后调用,但绝对不需要在每个页面上完成.


Chr*_*kis 6

确实遇到了问题(在页面刷新或在ajax请求中), session_regenerate_id(true);在每个请求上使用.

但不是 session_regenerate_id();

所以,根据

任何权限级别更改后续订会话ID https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Renew_the_Session_ID_After_Any_Privilege_Level_Change

每次请求都重新生成SID http://en.wikipedia.org/wiki/Session_fixation#Regenerate_SID_on_each_request

我用

  • session_regenerate_id(); 在每个请求上
  • session_regenerate_id(true); 登录,注销等(任何权限级别更改)

  • 是不是`session_regenerate_id(FALSE)`用会话文件丢弃服务器? (2认同)

Che*_*lix 2

与其生成会话 ID,为什么不加密并使用已经生成的会话 ID。当预期操作完成时,它可以被使用和销毁。