【问题标题】:Laravel 5 forms && expired sessions - are there alternatives to laravel-caffeine?Laravel 5 forms && expired sessions - laravel-caffeine 有替代品吗?
【发布时间】:2016-10-25 12:39:18
【问题描述】:

所以根据我的经验,即使在 laravel 5.2 中也会发生以下情况:

  • 在浏览器中显示带有 (ajax) 表单的页面
  • 用户做了其他事情(例如回家)
  • 当用户稍后返回并且会话过期时,他会收到一条错误消息,指出 vrsf 令牌无效 (VerifyCsrfToken.php)
  • 用户感到困惑

到目前为止,我还没有找到任何针对此问题的内置解决方案。我正在使用https://github.com/GeneaLabs/laravel-caffeine,但感觉有点奇怪,我必须使用 3rd 方库来解决这个基本问题。也许我错过了什么?

【问题讨论】:

    标签: php laravel session laravel-5


    【解决方案1】:

    您不必为此使用第 3 方软件包。它所做的只是在页面末尾添加一些 JavaScript,在给定的时间间隔内通过 Ajax 对服务器执行 ping 操作,以保持会话处于活动状态。

    CSRF-Token 是通用安全概念的一部分。但是如果你确定你的任务不需要它,你可以告诉特定的路线不要打扰它。在/app/Http/Middleware/VerifyCsrfToken.php 中有一个数组,您可以在其中添加要从 CSRF 验证中排除的路由:

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
    ];
    

    但这可能不是最好的主意,因为您正在研究一个安全概念。

    这只会防止TokenMismatchException 被抛出。如果您发布到的控制器仍然依赖于活动会话,例如。 G。如果它需要登录用户或其他东西,这也无济于事。

    因此,有几种解决方案:

    • 关闭该路由的 CSRF 验证。如果您知道自己在做什么并且会话无关紧要,请执行此操作
    • 连接到\Illuminate\Session\TokenMismatchException 并向用户返回格式正确的消息,说明他们的会话已过期,并要求他们重新加载页面(我想这是推荐的方式)
    • 延长会话生命周期 - 正如 @TheFallen 已经说过的那样,显然不是最好的主意
    • 使用该第 3 方包或仅添加您自己的一小段 JavaScript。

    【讨论】:

    • 像“laravel-caffeine”(发送“保持活动”消息)这样的解决方案的要点是,它实际上除了使会话持续时间无限(会话永远不会过期)之外没有做任何其他事情)。既然如此,在我看来,您也可以简单地增加配置文件中的会话超时值 - 更简单,最后我并没有真正看到区别 - 或者仍然存在安全优势“保持活力”的解决方案?我想“正确”的解决方案一般来说确实是处理异常并向用户显示一条简洁的消息。
    • @leo 好吧,只是增加会话生命周期和刷新它以使其保持活动状态之间存在很大差异。如果您的会话生命周期很长,则会话将在您可能不希望的浏览器重新启动后继续存在。或者想象一下你的会话令牌被泄露了——攻击者将分别有更多的时间做坏事。然而,如果您只是定期 ping 会话以重置短暂的生命周期仅在浏览器打开时,您将不会遇到该问题,同时仍会根据需要保持有效会话。
    • Quasdunk 是的,我明白你的意思 - 最大的区别确实是“保持活力”仅适用于物理浏览器会话,而增加超时并不能保证任何事情,从而打开门滥用......这有很大的不同,重点!
    【解决方案2】:

    您可以增加会话的到期时间。打开 config/session.php 并将 'lifetime' 更改为您希望允许会话有效的时间。

    或者在 Exceptions/Handler.php 中监听 VerifyCsrfToken 异常并向用户显示他需要刷新页面、再次登录等,我认为这会是更好的选择,因为增加会话生命周期会增加安全风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 2011-07-17
      • 2017-03-05
      • 2021-03-05
      • 1970-01-01
      相关资源
      最近更新 更多