Php Laravel 5.2:Chrome上修订的Iframe表单上的令牌不匹配异常?
我在5.2版上使用了Laravel应用程序来创建动态表单,可以使用Iframe对任何网页进行校正。几个月前表单工作正常,但现在无法在Chrome(最新版本)上工作,原因如下: 此集合Cookie未指定“SameSite”属性,默认为SameSite=lax,并被阻止,因为它来自corss站点响应,而不是对顶级导航的响应。Set Cookie必须设置为“SameSite=None”才能启用跨站点请求 以下是具有所有属性的Iframe:Php Laravel 5.2:Chrome上修订的Iframe表单上的令牌不匹配异常?,php,laravel,google-chrome,cookies,csrf,Php,Laravel,Google Chrome,Cookies,Csrf,我在5.2版上使用了Laravel应用程序来创建动态表单,可以使用Iframe对任何网页进行校正。几个月前表单工作正常,但现在无法在Chrome(最新版本)上工作,原因如下: 此集合Cookie未指定“SameSite”属性,默认为SameSite=lax,并被阻止,因为它来自corss站点响应,而不是对顶级导航的响应。Set Cookie必须设置为“SameSite=None”才能启用跨站点请求 以下是具有所有属性的Iframe: <iframe src="https://lo
<iframe src="https://local.testproject.com/iframe/MSvnBNB9FT4H4m7kNi1OSJtdomsAxW3XnR6KZn1W9dStupbBLjYSfn7txRUNIDCa0UWCR4RbeiWJaMgy6JSDbZXzsFf8C6u32pUD5TiHPqJzxQiLwXXYm8SsUqHqhhoV" sandbox="allow-forms allow-modals allow-popups allow-scripts allow-same-origin allow-top-navigation" style="width: 100%; height: 650px; border: none;"></iframe>
还添加了参数config/session.php
:
/*
|--------------------------------------------------------------------------
| Same-Site Cookies
|--------------------------------------------------------------------------
|
| This option determines how your cookies behave when cross-site requests
| take place, and can be used to mitigate CSRF attacks. By default, we
| do not enable this as other CSRF protection services are in place.
|
| Supported: "lax", "strict", "none"
|
*/
'same_site' => 'None'
之后,我修改了vendor\laravel\framework\src\illumb\Foundation\Http\Middleware\VerifyCsrfToken.php
,并用以下方法添加了新参数same\u site
:
protected function addCookieToResponse($request, $response)
{
$config = config('session');
$response->headers->setCookie(
new Cookie(
'XSRF-TOKEN', $request->session()->token(), time() + 60 * $config['lifetime'],
$config['path'], $config['domain'], $config['secure'], false, $config['same_site']
)
);
return $response;
}
还是不走运!我知道修改核心不是一个好的做法,但我只是想让它起作用。请指导我如何做到这一点
感谢在5.5版中将
相同的站点
属性添加到laravel中:
要使用它,您必须更新您的laravel应用程序或使用简单的技巧,包括在config/session.php
中编辑path
属性,以:
“路径”=>“/;samesite=无',
就这样 我也试过这个
'path'=>'/;samesite=none',
,但它不起作用。您的PHP版本是什么?PHP版本7.3因为PHP 7.3的“path”值被转义,所以您唯一的解决方案可能是升级您的laravel应用程序。
protected function addCookieToResponse($request, $response)
{
$config = config('session');
$response->headers->setCookie(
new Cookie(
'XSRF-TOKEN', $request->session()->token(), time() + 60 * $config['lifetime'],
$config['path'], $config['domain'], $config['secure'], false, $config['same_site']
)
);
return $response;
}