内容安全策略时,mailto href 框架内不起作用

The*_*Pea 4 mailto iframe href content-security-policy

总结

站点位于https://localhost:3000Content-Security-Policy值为default-src 'self' 'unsafe-inline' https://localhost:3001/https_index.html包含指向 的 iframe https://localhost:3001/index.html。的内容:3001/index.html包含一个<a href="mailto..."></a>. 单击该链接失败:Refused to frame '' because it violates the following Content Security Policy directive...如何更改我的 CSP 值以防止出现此错误;在用户首选的电子邮件客户端中打开新电子邮件(正常行为mailto)?我正在使用 Chrome 1

详情

此问题类似但不同的是“mailto 链接在框架 chrome 中不起作用(通过 https)”

我认为我的不是重复的,因为:

  1. 无法重现那个错误,当我尝试重现他们的步骤时,我看到一个关于混合内容的控制台警告

    混合内容:位于“ https://localhost:3001/https_index.html ”的页面已通过 HTTPS 加载,但请求了不安全的资源“mailto:...”。此内容也应通过 HTTPS 提供。

  2. 我的步骤是具体的;我的页面及其 iframe src 都是https,但页面本身具有特定的限制性 Content-Security-Policy( CSP):

    app.use(csp({ directives: { defaultSrc: ["'self' 'unsafe-inline' https://localhost:3001/https_index.html"] } }));

  3. 可以重现的结果错误不同:

    拒绝框架 '' 因为它违反了以下内容安全策略指令:“default-src 'self' https://localhost:3001/https_index.html ”。请注意,'frame-src' 未明确设置,因此使用 'default-src' 作为后备。

使用如下图像: 显示谷歌浏览器悲伤的脸图标提示错误; 消息显示“对服务器的请求已被扩展程序阻止”

  1. 原始问题的公认答案帮助我解决我的 CSP特定问题,也就是说,如果我target="_top"向链接添加一个,电子邮件客户端打开时不会出错: <a target="_top" href="mailto:...">email</a> 类似的修复程序适用于另一个类似但不同的问题。但是,这可能1有时会打开一个新选项卡

所以我的问题特别是关于Content-Security-Policy错误(见上文)

...拒绝框架 '' 因为它违反了以下内容安全策略指令:...

注意它说frame ''。该帧被标识为空字符串

通常,如果某个资源违反了 CSP,则会识别该资源的 URL;IE

拒绝修改脚本' http: //evil.com/evil.js '...

如果CSP-violating URL 被识别 + 提供,我可以使用它;将其添加到我的CSP价值中default-src

`app.use(csp({
  directives: {
    defaultSrc: ["http://evil.com/evil.js 'self' 'unsafe-inline' https://localhost:3001/https_index.html"]
    }
  }));`
Run Code Online (Sandbox Code Playgroud)

但是我可以允许一个href值的例外吗?专门用于mailto? 我尝试了像 一样的通配符mailto*,但是:

内容安全策略指令“default-src”的源列表包含无效源:“mailto*”。

我想知道是否有任何通配符可以使用;Chrome 真的将href="mailto..."框架视为空字符串吗?我想是的,因为它本身不是一个 URL;Chrome“想要”在 iframe 的上下文中启动一个外部应用程序(即 Outlook);谁绑定到其父页面的 CSP 规则...

脚注:

  1. Chrome 在 CSP 或沙盒情况下会显示上述错误。Internet Explorer 不会抱怨iframeshref,尽管CSP. Internet Explorer 也没有“新标签”问题,尽管sandbox. IE 11.1914 只会给出消息:

Internet Explorer 对话框要求用户确认他们希望允许此页面打开 Outlook 到 href 源,并选择以后忽略此消息

  1. 如果您已经编辑了 iframe ,则使用的修复target="_top" 可能会打开一个新选项卡sandbox!(sandbox与 不同CSP)。我不喜欢新标签。Chrome 给了我这个错误...

    不安全的 JavaScript 尝试从 URL 为“ https://localhost:3001/index.html ”的框架中为 URL 为“ http://localhost:3000/ ”的框架启动导航。尝试导航顶级窗口的框架被沙盒化,但未设置“allow-top-navigation”或“allow-top-navigation-by-user-activation”标志。

...但打开了一个新选项卡,以及 Outlook 电子邮件客户端...

显示在 Chrome 浏览器中打开的新标签页,其 URL 设置为 iframe 中的“mailto:”值

我做了错误提示的操作;修改的值iframe sandbox属性: sandbox="allow-top-navigation allow-same-origin ..."和mailto连结的工作(如前),但并没有打开过多的新标签。伟大的!

小智 6

遇到同样的问题后偶然发现了这个问题。经过数小时的搜索,几乎没有关于此的文档。

我的第一直觉是做一些像你正在做的事情,mailto*或者mailto:*

最终工作的是省略通配符,并frame-src像这样改变指令:

frame-src 'self' mailto: tel: *.mydomain.com

tel: iframe 中的链接也被破坏了。