为了账号安全,请及时绑定邮箱和手机立即绑定

跨域 CSRF 令牌检查失败

跨域 CSRF 令牌检查失败

PHP
开心每一天1111 2023-06-24 17:09:20
我有一个www.example.com从 加载 iframe 的网站www.another.com。正在加载的页面包含 HTML 和 JS,它们会触发对 self ( ) 的 AJAX 调用www.another.com。这两个站点都支持 HTTPS。iframe 加载得很好,脚本正在执行,但是,当我单击“提交”(这是 iframe 的一部分)时,www.another.com由于 CSRF 令牌无效,我的请求被拒绝。iframe 中的表单确实包含一个token字段,该字段具有一个值(一些哈希值)。当我直接访问时,ajax 调用工作正常www.another.com。据我所知,到目前为止,当 ajax 调用到达服务器时,它没有启动会话,因此它无法找到匹配的令牌。我使用Symfony 4.4withNelmioCorsBundle来确保正确的 CORS。配置如下所示:nelmio_cors:    defaults:        allow_credentials: false        origin_regex: false        allow_origin: ['https://www.example.com','https://www.another.com']        allow_methods: ['GET', 'OPTIONS', 'POST']        allow_headers: ['Origin','Referer']        expose_headers: []        max_age: 3600失败的 ajax 请求有以下标头: 有什么办法可以解决这个问题吗?
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

找到了解决方案。

该域www.another.com正在发送Cookie带有SameSite=lax. 这意味着除非启动顶级导航,否则不会包含这些 cookie。对于iframeAJAX 调用来说,这并不能解决问题。

解决此问题的方法是SameSite禁用framework.yml.

session:
        cookie_samesite: null <--- THIS

我很清楚潜在的安全后果,但是:

  • AJAXPOST端点受 CSRF 令牌保护,

  • 这两个网站都是 HTTPS

……所以我想我会没事的。我是吗?

我真的很期待听到是否存在比我上面概述的问题更严重的问题:)

我想指出的另一件事是我的 CORS 配置并非完全无关紧要。我的所有请求都是“简单”的,因此不会触发预检请求。


查看完整回答
反对 回复 2023-06-24
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信