The*_*Pea 4 mailto iframe href content-security-policy
总结:
站点位于https://localhost:3000,Content-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)”
我认为我的不是重复的,因为:
我无法重现那个错误,当我尝试重现他们的步骤时,我看到一个关于混合内容的控制台警告:
混合内容:位于“ https://localhost:3001/https_index.html ”的页面已通过 HTTPS 加载,但请求了不安全的资源“mailto:...”。此内容也应通过 HTTPS 提供。
我的步骤是具体的;我的页面及其 iframe src 都是https,但页面本身具有特定的限制性 Content-Security-Policy( CSP):
app.use(csp({
directives: {
defaultSrc: ["'self' 'unsafe-inline' https://localhost:3001/https_index.html"]
}
}));
我可以重现的结果错误也不同:
拒绝框架 '' 因为它违反了以下内容安全策略指令:“default-src 'self' https://localhost:3001/https_index.html ”。请注意,'frame-src' 未明确设置,因此使用 'default-src' 作为后备。
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 规则...
脚注:
iframeshref,尽管CSP. Internet Explorer 也没有“新标签”问题,尽管sandbox. IE 11.1914 只会给出消息:如果您已经编辑了 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 电子邮件客户端...
我做了错误提示的操作;修改的值iframe sandbox属性:
sandbox="allow-top-navigation allow-same-origin ..."和mailto连结的工作(如前),但并没有打开过多的新标签。伟大的!
小智 6
遇到同样的问题后偶然发现了这个问题。经过数小时的搜索,几乎没有关于此的文档。
我的第一直觉是做一些像你正在做的事情,mailto*或者mailto:*。
最终工作的是省略通配符,并frame-src像这样改变指令:
frame-src 'self' mailto: tel: *.mydomain.com
tel: iframe 中的链接也被破坏了。
| 归档时间: |
|
| 查看次数: |
3414 次 |
| 最近记录: |