【问题标题】:Can session fixation attack in Laravel application be protected by session_regenerate?Laravel 应用程序中的会话固定攻击可以通过 session_regenerate 保护吗?
【发布时间】:2019-02-18 08:30:29
【问题描述】:

我正在使用具有登录功能的 Laravel 应用程序中的会话。

会话存储在数据库中。

我的应用会话生成会话名称“laravel_session”。

也许,它是默认名称。(我在 chrome 调试器中检查过。)

我认为它会导致会话固定。
所以,我在登录过程之后使用session->regenerate()
但是,它再次生成“laravel_session”。有效吗?
我在session->regenerate() 之后检查了会话表,发现“id”列已更改。

【问题讨论】:

  • 您对会话固定的工作方式存在误解。这不是 cookie 名称,而是会话 ID,它(如您所见)正在正确更改。

标签: php laravel security session


【解决方案1】:

session_name()(命名 cookie)和session_id()(应该是随机的、不可预测的值)之间存在巨大差异。

您的会话名称是公共知识。需要保密的是会话 ID。

(将其视为key => value 对。)

无论如何,session_regenerate_id(true);use_strict_mode 配置指令的意义在于缓解会话固定问题。当用户更改其权限级别(登录、注销等)时,您应该始终重新生成会话 ID。

【讨论】:

    【解决方案2】:

    Laravel 已经包含了针对会话固定的内置保护,以及一个让你自己做的内置函数:

    https://laravel.com/docs/5.6/session

    如果你使用内置的 LoginController,Laravel 会在认证过程中自动重新生成会话 ID;但是,如果您需要手动重新生成会话 ID,您可以使用 regenerate 方法。

    $request->session()->regenerate();
    

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2017-02-07
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多