重新生成会话ID

问题描述:

我想在每个页面上使用此代码以减少会话劫持的可能性。通过更新SESSION_ID在每次请求重新生成会话ID

if(!empty($_session)){ 
    session_start(); 
} 

另一种方式来实现,因此我们将做到这一点:

if(!empty($_session)){ 
    session_regenerate_id(true); 
} 

不过,我听说说,功能的批评,如果页面被刷新太快出于某种原因,会话ID变得无效。

使用会话标识的另一种方法是更好地控制会话的生成方式。

还有其他方法可以达到这样的效果..最佳实践是什么?

而不是生成会话ID,为什么不加密和使用已生成的one.It可以使用和销毁预期的行动完成后。

+0

最好的情况是重新生成id唯一的ones.at在入境点(登录)只。 –

+0

我该怎么做?我如何获得会话ID ..我有一个可以解密的加密函数,我可以解密它,我不关心速度......这就是它的做法:session_id($ newSession);然后当我解密它时,我该如何保存旧的会话ID。在数据库中? –

+0

session_start(); session_regenerate_id(true); $ _SESSION ['user_session'] = session_id(); $ user_session = $ _ SESSION ['user_session']; //尝试传递$ user_session进行加密。首先回显测试 –

最佳做法是使用SSL(并针对其他安全攻击媒介(如XSS和SQL注入)应用通常的防御措施)。骑自行车会议ids只是乞求比赛条件。

+0

SSL不会保护你从收获的cookies通过,也就是说,XSS。 – CodeCaster

+0

“我很熟悉ssl,但我不想从我的网络主机购买它 –

+0

@Dmitry - 便宜或安全的,挑一个 – Quentin

在每个页面调用session_regenerate_id是一个不必要的开销。

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

如果您还想额外存储最后一次重新生成的时间,然后在30分钟后打电话给session_regenerate_id,但肯定不需要在每个页面上完成此操作。

+0

不错的一点,我会应用它 –

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

嗯,我想你必须尝试一下才能确认,但我不认为你会遇到这个问题。

无论如何,为每个页面负载重新生成会话并不能完全避免会话劫持,并使用更好地在其他地方使用的资源。一个更好的开始就是看SSL。加密客户端和网络服务器之间的数据更安全。

我个人仅在用户登录时以及用户注销我的应用程序时才重新生成会话ID。

+0

每当用户登录网页时,为什么要重新生成会话 –

+0

我喜欢这样的想法:只要我的用户进入或离开某些我被限制到其他人的东西,他们就会开始新的会话。至于为什么,我没有技术上的争论。 – Repox

+0

不怕比赛条件... 2个用户获得相同的ID? –

确实存在问题(页面刷新或内部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(true);使用

    • session_regenerate_id();,注销等(任何特权级的变化)
  • +2

    是不是'session_regenerate_id(FALSE)'抛弃了会话文件的服务器? – Calmarius