【问题标题】:Laravel project within iframe - CSRF token mismatchiframe 中的 Laravel 项目 - CSRF 令牌不匹配
【发布时间】:2022-01-07 14:15:12
【问题描述】:

我有一个项目,我在其中实现了 Sanctum 以用作 api 调用的身份验证。我就是这样用的

axios.get('/sanctum/csrf-cookie').then(response => {
   axios.post('/api/login', {data: data})
   .then(response => {
     ...
   })
   .catch(error => {
     ...
   });
});

当我将其作为独立页面运行时,一切正常。但是,一旦我尝试在另一个项目的 iframe 中使用相同的 url 和相同的数据,我就会收到 CSRF token mismatch. 错误。任何指导将不胜感激。

【问题讨论】:

  • @SamuelFerdary 是的,我看到了那个,但我担心提供的解决方案会带来哪些安全威胁?此外,这不是不同域之间的提交,一切都发生在同一个站点/域上。

标签: laravel authentication csrf laravel-sanctum


【解决方案1】:

iframe 的使用和安全性取决于用例。

安全方面:

如果您关心安全性,请不要使用 iframe。

见:

StackExchange: What are the security implications of having login dialog inside of an iframe

在指定端点上禁用 CSRF:

如果您有不需要 CSRF 保护的特定路由,则可以在 Http/Middleware/VerifyCsrfToken.php

中为这些路由设置例外

见:

StackOverflow: Laravel 5 TokenMismatchException only in iFrame

全力支持 iframe:

您可以在 config/session.php

中编辑会话设置

见:

StackOverflow: Laravel 5.1 CSRF in iframe, how to make it work?

【讨论】:

  • iframe 中的该页面不用于传统用户登录。用户实际登录主机应用程序,然后将令牌传递给 iframe,通过该令牌在 iframe 内的应用程序上识别用户。我真的不想禁用 csrf 检查。使用会话配置可能是朝着正确方向迈出的一步
猜你喜欢
  • 2020-07-08
  • 2016-12-10
  • 2016-09-20
  • 2020-01-20
  • 2020-06-17
  • 1970-01-01
  • 2020-05-02
  • 2016-10-15
  • 2020-04-14
相关资源
最近更新 更多