Laravel 应用程序 |只有 Safari 有时会在请求中丢失 XSRF Cookie
Posted
技术标签:
【中文标题】Laravel 应用程序 |只有 Safari 有时会在请求中丢失 XSRF Cookie【英文标题】: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 Cookie的主要内容,如果未能解决你的问题,请参考以下文章
Safari 风格的 UIPopoverController
仅在 iOS 移动 Safari 中上传图像时出现错误的 CORS 失败
chrome?火狐?Safari?还是欧朋?浏览器PK的不仅仅只有颜值!