在 Laravel 中为 CSRF 令牌设置 httpOnly 标志

问题描述 投票:0回答:4

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

php csrf laravel-5.1 httponly
4个回答
23
投票

您可以在 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;

1
投票

这个问题可以修复。如果您只需要 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;
}

1
投票

必须在.env中使用

SESSION_DOMAIN=
SESSION_SECURE_COOKIE=true
SESSION_HTTP_ONLY=true
SESSION_SAME_SITE=strict

0
投票

/**

  • 将 CSRF 令牌添加到响应 cookie。

  • @param \Illuminate\Http\Request $request

  • @param \Symfony\Component\HttpFoundation\Response $response

  • @return \Symfony\Component\HttpFoundation\Response */ 受保护函数 addCookieToResponse($request, $response) { $config = config('会话');

    $响应->标题->setCookie( 新的 Cookie( 'XSRF-TOKEN', $request->session()->token(), $this->availableAt(60 * $config['lifetime']), $config['path'], $config['domain'], $config['secure'], true, false, $config['same_site'] ??无效的 ) );

    返回$响应; }

完美!

© www.soinside.com 2019 - 2024. All rights reserved.