【问题标题】:Logout does not expire session tokens注销不会使会话令牌过期
【发布时间】:2019-07-04 13:51:47
【问题描述】:

我们最近对 Laravel 5.6 应用程序进行了渗透测试,其中一个被标记的问题是在注销时未正确设置过期时间。 AuthenticatesUsers trait 在会话上调用 invalidate 方法,该方法基本上刷新会话数据并重新生成 ID,但不会为其设置过期时间。

根据报告,如果攻击者可以获得有效的会话令牌,他们将能够劫持受影响用户的帐户。用户注销不会使攻击者的会话失效。

这里的任何指针都会有很大帮助。

谢谢

/**
 * Log the user out of the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function logout(Request $request)
{
    $this->guard()->logout();

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

    return redirect('/');
}

【问题讨论】:

    标签: php laravel session laravel-5.6 session-management


    【解决方案1】:

    【讨论】:

    • 但这发生在同一台设备上,所以不确定这样做会有所帮助。注销功能本身很好,问题在于注销时未设置到期时间。
    • 攻击者获得会话不会使其会话失效不是核心问题吗? Auth::logoutOtherDevices() 将使 除当前会话之外的所有其他会话 无效,这解决了 那个 问题。使用注销按钮使所有其他会话过期不是典型行为,例如如果您在图书馆计算机上注销 gmail,您不希望您的笔记本电脑也被注销。
    • 如果我在这里错了,请纠正我,但是如果攻击者拥有与实际用户相同的会话令牌并且即使实际用户已经注销,那是否意味着会话令牌仍然可以由于没有设置有效期而重复使用?
    • 除非我严重误解了我正在阅读的代码,否则我很确定退出攻击者窃取的 same 会话会使该会话无效,就像他们中间人在你的饼干。也许是您的渗透测试报告的措辞令人困惑,因为如果攻击者在另一个浏览器上登录,那么他们将拥有自己的、与您刚刚注销的会话分开的会话。这就是Auth::logoutOtherDevices() 会使这些会话失效的地方——一个用户可以有多个活动会话。
    • 我实际上和你提到的关于使攻击者的同一会话无效的想法相同。但是渗透测试者能够使用注销的用户会话复制请求。不确定他们最终是如何做到这一点的(或者他们使用了哪些工具)。我从那些家伙那里得到的唯一指示是参考owasp.org/index.php/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2018-03-30
    • 2014-07-08
    • 2016-04-18
    • 2017-07-08
    • 2019-01-07
    相关资源
    最近更新 更多