Laravel 应用程序 |只有 Safari 有时会在请求中丢失 XSRF Coo​​kie

Posted

技术标签:

【中文标题】Laravel 应用程序 |只有 Safari 有时会在请求中丢失 XSRF Coo​​kie【英文标题】:Laravel Application | Only Safari is sometimes missing XSRF Cookie on Requests 【发布时间】:2021-06-29 12:04:00 【问题描述】:

我们最近部署了一个 Laravel 应用程序,并在我们的应用程序上遇到了一些 Safari 版本的奇怪问题。

在浏览我们的应用程序时,特别是如果用户未经授权,我们有时会在 Safari 上遇到请求/响应标头中不存在 XSRF-Token 的问题。

在申请表上,缺少令牌会导致 419 页面过期问题。

此问题有时仅在某些版本的 Safari 中出现。大多数情况下,Reset Cache & Cookies 解决了 1 或 2 个表单请求的问题。

我完全重置了 Safari

允许的 Cookie 允许跟踪 禁用的插件

技术

我们使用 php 8.0 和最新的 Laravel 版本。对于前端,有一个 vue.js 应用程序,以惯性.js 作为连接器。关于将 csrf-tokens 传递到前端,不需要进一步配置来传递 csrf-token。 (Soruce)

我试图捕获 TokenMismatchExpection 但没有机会只有 HTTPException 有效。

我的问题:

有人遇到过类似的问题吗?我该如何预防?

附上一些 Laravel 调试栏截图。

左侧 Safari 14.03 |右侧铬

页面过期画面

【问题讨论】:

就像您提供的源代码中提到的那样:您不需要处理任何与 CSRF 相关的事情,因为 Axios 会在后台解决所有问题。我建议要么尝试调试 axios 并设置一些断点,要么在他们的 github 上创建一个问题。 github.com/axios/axios/issues 我们还运营着一个相当大的网站,并且大约 3% 的用户遇到了这个问题(最终每周会出现数万个 419 错误)。浏览器、操作系统和位置似乎无关紧要。我们无法弄清楚发生了什么。有时 cookie 会根据请求发回给我们,但令牌不正确,并且对于其他用户根本没有设置。我们无法重现此问题,使其几乎可以修复。如果您仍然遇到此问题,很高兴与您一起解决此问题。 【参考方案1】:

我遇到了同样的问题。如果页面是通过来自另一个站点的链接打开的,我将问题归结为 Safari 忽略了“Set-Cookie”响应标头。 (就我而言,它是在 MailHog 中打开的电子邮件中的链接)。如果手动在新标签页中打开链接,问题就消失了。

由于缺少 XSRF-TOKEN cookie,axios 不会在 Laravel 指向 419 的请求中设置 X-XSRF-TOKEN 标头。

到目前为止,我还没有找到一个可行的解决方案来手动注入 X-XSRF-TOKEN 标头,因为 VerifyCsrfToken 中间件希望令牌是加密的 cookie。

【讨论】:

我可以确认这种行为。您找到解决方案了吗?

以上是关于Laravel 应用程序 |只有 Safari 有时会在请求中丢失 XSRF Coo​​kie的主要内容,如果未能解决你的问题,请参考以下文章

Safari 风格的 UIPopoverController

仅在 iOS 移动 Safari 中上传图像时出现错误的 CORS 失败

如何从Mac上卸载Safari

chrome?火狐?Safari?还是欧朋?浏览器PK的不仅仅只有颜值!

Safari ios(iphone 和 ipad)只有在点击 devtools 时才能正常工作

只有手机Safari无法打开页面,没有互联网消息