form-action CSP 阻止允许的 URL

Mar*_*ial 5 google-chrome content-security-policy

登录表单被 CSP 阻止,我不明白为什么

Chrome 版本 94.0.4606.61

错误信息 :

拒绝将表单数据发送到“https://subdomain.mydomain.com/login/local”,因为它违反了以下内容安全策略指令:“form-action 'self' https: *.mydomain.com”。

火狐浏览器没问题

gra*_*nty 10

这是因为在登录期间,您通过指令中不允许的主机源执行重定向form-action(端口、方案、域/子域名不匹配)。重定向时,CSP 检查整个源链,但浏览器的for 重定向
行为有所不同:form-action

  • Chrome/Safari认为提交表单时的重定向具有潜在危险,因为敏感的用户数据可能会被重定向到攻击者的域。因此,如果主机源(域)不允许参与form-actions重定向链,它们会阻止重定向。

  • Firefox认为服务器重定向受 CSP 保护的页面所有者的控制。因此,在重定向期间,它允许您在重定向期间甚至向第三方域发送表单。

注 1.'self'表示scheme://domain:port与地址栏中的 Url 完全相同。因此,CSP:

 form-action 'self' https: *.mydomain.com
Run Code Online (Sandbox Code Playgroud)
  • 如果 Url 是HTTPS://subdomain.mydomain.com上述 CSP,则它form-action HTTPS://subdomain.mydomain.com https: HTTPS://*.mydomain.com等于form-action https:- 它允许除http:-Urls 之外的任何内容。

  • 如果 Url 为HTTP://subdomain.mydomain.com,则上述 CSP 变为form-action HTTP://subdomain.mydomain.com https: HTTP://*.mydomain.com并且不允许主域mydomain.com

https://subdomain.mydomain.com/login/local注2.消息中的Url :

拒绝将表单数据发送到“https://subdomain.mydomain.com/login/local”,因为它违反了...`

不是URL真的被Chrome屏蔽了。这只是重定向链中的第一个 URL。

注3:如果CSP毕竟阻止了允许的域,那么很可能是NoScript/uBlock/AdBlock/PrivacyBadger等浏览器扩展的干扰。