我有一个静态网站,托管在存储桶中,并通过 Google 平台提供服务。
该网站已经运行了大约 6 个月,没有出现任何问题,但在过去的一个月里,由于“内容安全”问题,我遇到了间歇性问题,无法加载样式表和脚本 - 这导致浏览器中只显示主页的文本,没有样式,也没有(基于 Javascript 的)功能。我所说的间歇性是指它运行几个小时后就无法正常工作,然后又有几个小时无法正常工作。
此服务没有“网络服务器”,因为我只是从存储桶中提供静态页面 - 我知道 Google 必须有自己的服务器来处理这个问题。
检查浏览器中的开发人员控制台,我可以看到网页使用的所有样式表、脚本和字体都存在以下问题:
Refused to load the stylesheet XXXXXXX because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'style-src-elem' was not explicitly set, so 'default-src' is used as a fallback.
我认为我的内容安全设置正确:
<meta http-equiv="Content-Security-Policy" content="
default-src 'self';
img-src 'self'
https://syndication.twitter.com;
font-src 'self'
https://use.fontawesome.com
https://fonts.gstatic.com
https://fonts.googleapis.com;
script-src 'self' 'unsafe-inline'
https://stackpath.bootstrapcdn.com
https://connect.facebook.net
https://platform.twitter.com
https://code.jquery.com
https://cdnjs.cloudflare.com;
style-src 'self' 'unsafe-inline'
https://stackpath.bootstrapcdn.com
https://use.fontawesome.com
https://fonts.googleapis.com;
frame-src 'self'
https://www.facebook.com
https://connect.facebook.net
https://platform.twitter.com
https://www.youtube.com;
">
这些是失败的链接,每个“外部”链接都包括使用导入进行签名以确保加载“真实”的内容。
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<!-- Font Awesome -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
<!-- Custom fonts for this template -->
<link href='https://fonts.googleapis.com/css?family=Titillium+Web' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
有人能看到我做错了什么或者提供任何关于如何让它持续工作的建议吗?
答案1
正如@Bruno 在评论部分所建议的那样,这个问题已经解决了问题为了更好的可用性,我复制粘贴(带有链接)了两个用户确认有效的解决方案;
<meta http-equiv="Content-Security-Policy" content="default-src * self blob: data: gap:; style-src * self 'unsafe-inline' blob: data: gap:; script-src * 'self' 'unsafe-eval' 'unsafe-inline' blob: data: gap:; object-src * 'self' blob: data: gap:; img-src * self 'unsafe-inline' blob: data: gap:; connect-src self * 'unsafe-inline' blob: data: gap:; frame-src * self blob: data: gap:;">
警告:这使得该文档面临许多攻击风险。以下是有关可能的安全风险和漏洞的详细说明。
为了进一步阐述这一点,添加
script-src 'self' http://somedomain 'unsafe-inline' 'unsafe-eval';
像这样添加到元标记中,
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; script-src 'self' https://somedomain.com/ 'unsafe-inline' 'unsafe-eval'; media-src *">
修复了错误。