【发布时间】:2018-09-25 19:34:15
【问题描述】:
我正在开发一个 nodejs 电子应用程序,在我的 index.html 中,我有一个看起来像这样的“Content-Security-Policy”
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy"
content="
default-src 'self' https://*.mydomain.tld;
script-src 'self' https://*.mydomain.tld;
style-src 'self' https://*.mydomain.tld;
img-src 'self' https://*.mydomain.tld;
font-src 'self' https://*.mydomain.tld;
connect-src 'self' https://*.mydomain.tld;
media-src 'self' https://*.mydomain.tld;
object-src 'self' https://*.mydomain.tld;
child-src 'self' https://*.mydomain.tld;
frame-ancestors 'self' https://*.mydomain.tld;
frame-src 'self' https://*.mydomain.tld;
worker-src 'self' https://*.mydomain.tld;
form-action 'self' https://*.mydomain.tld;
block-all-mixed-content;
">
当我运行应用程序时,它运行良好,所有资产都加载得很好,但在控制台中我收到以下错误
通过元素传递的内容安全策略可能不会 包含 frame-ancestors 指令。 index.html: 4
我一直在尝试摆脱错误并寻找可能导致它的原因但找不到任何东西,对我来说一切似乎都是正确的但我仍然收到错误,我还认为错误可能是由服务器@https://*.mydomain.tld 所以我尝试了这个
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy"
content="
default-src 'self';
script-src 'self';
style-src 'self';
img-src 'self';
font-src 'self';
connect-src 'self';
media-src 'self';
object-src 'self';
child-src 'self';
frame-ancestors 'self';
frame-src 'self';
worker-src 'self';
form-action 'self';
block-all-mixed-content;
">
导致完全相同的错误,我可以完全忽略该错误,因为该应用程序确实可以正常工作,并且该错误似乎没有引起任何问题,但是如果有人知道可能是什么错误,我将不胜感激。
编辑:当我删除框架祖先时,标签看起来像这样
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy"
content="
default-src 'self' https://*.mydomain.tld;
script-src 'self' https://*.mydomain.tld;
style-src 'self' https://*.mydomain.tld;
img-src 'self' https://*.mydomain.tld;
font-src 'self' https://*.mydomain.tld;
connect-src 'self' https://*.mydomain.tld;
media-src 'self' https://*.mydomain.tld;
object-src 'self' https://*.mydomain.tld;
child-src 'self' https://*.mydomain.tld;
frame-src 'self' https://*.mydomain.tld;
worker-src 'self' https://*.mydomain.tld;
form-action 'self' https://*.mydomain.tld;
block-all-mixed-content;
">
错误消失了,我不应该添加它吗?
【问题讨论】:
-
是的,错误消息明确指出,通过
<meta>元素传递的内容安全策略可能不包含 frame-ancestors 指令。 frame-ancestors 指令对元元素无效。请参阅developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…(<meta>元素不支持此指令。)和w3c.github.io/webappsec-csp/#meta-element(注意:内部不支持 Content-Security-Policy-Report-Only 标头元元素。report-uri、frame-ancestors 和沙盒指令也不是。) -
所以如果你用 meta 指定 frame-ancestors,它不会导致任何失败——它只会导致浏览器报告问题中引用的错误消息。根据规范,它只是从策略中删除。请参阅html.spec.whatwg.org/multipage/…(4. 从策略中删除所有出现的 report-uri、frame-ancestors 和沙盒指令。)