【问题标题】:Set httpOnly flag for CSRF token in Laravel在 Laravel 中为 CSRF 令牌设置 httpOnly 标志
【发布时间】:2016-02-25 12:50:51
【问题描述】:

我正在 Laravel 5.1 中为客户构建一个应用程序。完成应用程序后,我收到了一份渗透测试报告,告诉我添加一个 HttpOnly 标志。 我在 app/config/session.php 中添加了 'secure' => true 和 'http_only' => true。为所有会话设置了 httpOnly 标志,XSRF-TOKEN 会话除外。我怎么能设置这个标志呢?

【问题讨论】:

    标签: php csrf laravel-5.1 httponly


    【解决方案1】:

    你必须在.env中使用

    SESSION_DOMAIN=
    SESSION_SECURE_COOKIE=true
    SESSION_HTTP_ONLY=true
    SESSION_SAME_SITE=strict
    

    【讨论】:

      【解决方案2】:

      这可以解决。如果您只需要 http 作为令牌,请将其添加到 VerifyCsrfToken 中间件:

      /**
       * Add the CSRF token to the response cookies.
       *
       * @param  \Illuminate\Http\Request  $request
       * @param  \Symfony\Component\HttpFoundation\Response  $response
       * @return \Symfony\Component\HttpFoundation\Response
       */
      protected function addCookieToResponse($request, $response)
      {
          $config = config('session');
      
          $response->headers->setCookie(
              new Cookie(
                  'XSRF-TOKEN', $request->session()->token(), $this->availableAt(60 * $config['lifetime']),
                  $config['path'], $config['domain'], $config['secure'], true, false, $config['same_site'] ?? null
              )
          );
      
          return $response;
      }
      

      【讨论】:

        【解决方案3】:

        您可以覆盖 App\Http\Middleware\VerifyCsrfToken 中的 addCookieToResponse($request, $response) 方法

        /**
         * Add the CSRF token to the response cookies.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Illuminate\Http\Response  $response
         * @return \Illuminate\Http\Response
         */
        protected function addCookieToResponse($request, $response)
        {
            $response->headers->setCookie(
                new Cookie('XSRF-TOKEN',
                    $request->session()->token(),
                    time() + 60 * 120,
                    '/',
                    null,
                    config('session.secure'),
                    false)
            );
        
            return $response;
        }
        

        别忘了添加

        use Symfony\Component\HttpFoundation\Cookie;
        

        【讨论】:

        • 如果您希望将 httpOnly 标志设置为 true,则 Cookie() 方法的最后一个参数必须为 true:$response->headers->setCookie( new Cookie('XSRF-TOKEN', $request->session()->token(), time() + 60 * 120, '/', null, config('session.secure'), true)
        猜你喜欢
        • 2015-02-02
        • 2015-07-21
        • 2014-05-17
        • 2013-12-24
        • 2017-11-29
        • 1970-01-01
        • 2012-05-18
        • 2020-05-11
        • 1970-01-01
        相关资源
        最近更新 更多