ember-cli 0.0.47 升级后违反内容安全策略指令

Posted

技术标签:

【中文标题】ember-cli 0.0.47 升级后违反内容安全策略指令【英文标题】:Violating Content Security Policy directive after ember-cli 0.0.47 upgrade 【发布时间】:2014-11-29 07:13:39 【问题描述】:

我将我的 ember-cli 应用程序升级到 0.0.47,现在我的浏览器控制台中出现了一堆与内容安全策略相关的错误。我该如何解决这个问题?

Refused to load the script 'http://use.typekit.net/abcdef.js' because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' localhost:35729".
 login:1
Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' localhost:35729". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
 login:20
Refused to load the script 'http://connect.facebook.net/en_US/all.js' because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' localhost:35729".
 login:1
Refused to load the script 'http://maps.googleapis.com/maps/api/js?libraries=places' because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' localhost:35729".

这是我的 app/index.html 文件中的行:

<script type="text/javascript" src="//use.typekit.net/abcdef.js"></script>
<script type="text/javascript">tryTypekit.load();catch(e)</script>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places"></script>

【问题讨论】:

【参考方案1】:

在阅读了http://content-security-policy.com/ 和https://github.com/rwjblue/ember-cli-content-security-policy 的一些文档后,我在我的 config/environment.js 文件中添加了一些策略,如下所示:

module.exports = function(environment) 
  var ENV = 
    contentSecurityPolicy: 
      'default-src': "'none'",
      'script-src': "'self' 'unsafe-inline' 'unsafe-eval' use.typekit.net connect.facebook.net maps.googleapis.com maps.gstatic.com",
      'font-src': "'self' data: use.typekit.net",
      'connect-src': "'self'",
      'img-src': "'self' www.facebook.com p.typekit.net",
      'style-src': "'self' 'unsafe-inline' use.typekit.net",
      'frame-src': "s-static.ak.facebook.com static.ak.facebook.com www.facebook.com"
    ,

  // ...
;

这使所有直接错误都消失了,但是当我开始浏览我的应用程序时,出现了与 S3 媒体源相关的新错误。

我确信这适用于不包含任何外部资源的应用,但我决定从我的 package.json 文件中删除“ember-cli-content-security-policy”。

【讨论】:

我认为您需要以某种方式将 S3 列入白名单,但 API 对我来说仍然很不透明。 我们使用s3.amazonaws.com 将 s3 列入白名单,但是......我们在 Firefox 上遇到了奇怪的问题。 Chrome 似乎运行良好。 您可以允许所有使用通配符*。完整列表:content-security-policy.com/#source_list 只是一个更新,由于这些人体工程学问题,我们实际上已从默认安装中删除了 CSP。我们认为这实际上使问题变得更糟,我们确实希望(随着人体工程学的改进)将其恢复为默认插件。 我们引入了一些外部资源,并且还使用了强大的 CSP。所以它可以完成,但它也可能是很多工作。最好的安全措施是将所有内容列入黑名单,然后将您想要允许的内容列入白名单。不幸的是,这意味着要遍历每个外部资源并将它们一一列入白名单。带有*unsafe-evalunsafe-inline 的CSP 实际上是没有用的。而且你必须检查你运行的外部脚本加载的东西并将其列入白名单,而不仅仅是脚本本身,显然。【参考方案2】:

从谷歌链接到字体时我不得不使用它:

<link rel='stylesheet' href='http://fonts.googleapis.com/css?family=Lato:400,700,900'>

在我使用的config/environment.js文件中

contentSecurityPolicy: 
  'font-src': "'self' data: fonts.gstatic.com",
  'style-src': "'self' 'unsafe-inline' fonts.googleapis.com"
,

【讨论】:

以上是关于ember-cli 0.0.47 升级后违反内容安全策略指令的主要内容,如果未能解决你的问题,请参考以下文章

将 emberJS 应用程序更新为 ember-cli 和 data 3.28 后出现阻塞错误

ember-cli 元配置/环境文件

JQuery 3.5.1 并拒绝执行内联脚本,因为它违反了以下内容安全策略指令:

在配置文件中保存 ember-cli 的端口号

拒绝应用内联样式,因为它违反了以下内容安全策略指令

ember-cli 在哪里放置图像