【问题标题】:form-action CSP blocking allowed URL表单操作 CSP 阻止允许的 URL
【发布时间】:2021-11-24 17:08:38
【问题描述】:

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

Chrome 版本 94.0.4606.61

错误信息:

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

火狐没问题

【问题讨论】:

    标签: google-chrome content-security-policy


    【解决方案1】:

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

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

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

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

     form-action 'self' https: *.mydomain.com
    
    • 如果 Url 是 HTTPS://subdomain.mydomain.com,则上述 CSP 将变为 form-action HTTPS://subdomain.mydomain.com https: HTTPS://*.mydomain.com whis 等于 form-action https: - 它允许除 http:-Urls 之外的任何内容。

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

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

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

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

    注意3。如果CSP毕竟屏蔽了允许的域,很有可能是interference of browser extensions如NoScript/uBlock/AdBlock/PrivacyBadger等干扰。

    【讨论】:

    • 甚至没有想过会有这样的答案。非常感谢。但是如果重定向链中的所有 URL 都具有相同的域并且是 https,为什么 Chrome 会阻止它们?
    • 检查您安装了哪些浏览器扩展。诸如 NoScript/adblock/adblock 之类的扩展可以将 effect of blocking 看似列入白名单的来源。我已经更新了答案。
    • 我认为 Safari 和 Firefox 一样,doesn't block redirects.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多