我有一个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。对于iframe
AJAX 调用来说,这并不能解决问题。
解决此问题的方法是SameSite
禁用framework.yml
.
session: cookie_samesite: null <--- THIS
我很清楚潜在的安全后果,但是:
AJAX
POST
端点受 CSRF 令牌保护,这两个网站都是 HTTPS
……所以我想我会没事的。我是吗?
我真的很期待听到是否存在比我上面概述的问题更严重的问题:)
我想指出的另一件事是我的 CORS 配置并非完全无关紧要。我的所有请求都是“简单”的,因此不会触发预检请求。
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消