【问题标题】:Local jquery.js file causing Content Security Policy (CSP) violation errors本地 jquery.js 文件导致内容安全策略 (CSP) 违规错误
【发布时间】:2016-09-12 15:25:17
【问题描述】:

我在本地有以下js文件;

<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>

在 Ripple 中运行我的 Cordova Phonegap 应用程序会引发以下错误;

jquery.mobile-1.4.5.min.js:3 Refused to load the image 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==' because it violates the following Content Security Policy directive: "default-src * 'unsafe-eval' 'unsafe-inline'". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.

我在 html 中有以下元数据;

<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-eval' 'unsafe-inline'">

如何防止引发 (CSP) 违规错误?有什么办法吗?

编辑:将 ajax.googleapis url 添加到 meta 有助于消除大部分 CSP 错误;

 <meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-eval' https://ajax.googleapis.com/ 'unsafe-inline'">

但我仍然有一些类似的东西;

Refused to load the font 'data:font/woff;base64,d09GRgABAAAAAI3gABIAAAABRWQAAQABAAAAAAAAAAAAAAAAAAAAA…IwnaGGIYHBlUELLMKwH6htK8MUhmKGIAYjqCImVEUgs1mBOtm1gRYpuNZmSrgAALqcEVgAAAA=' because it violates the following Content Security Policy directive: "default-src * 'unsafe-eval' https://ajax.googleapis.com/ 'unsafe-inline'". Note that 'font-src' was not explicitly set, so 'default-src' is used as a fallback.

错误来源是:http://localhost:3000/#&ui-state=dialog

但我认为这没什么大不了的,因为我认为是 Ripple Emulator 导致了该错误。

【问题讨论】:

  • A.我建议尽快升级你的 jQuery 库。最新(稳定)版本是2.2.3,而你被困在1.11.1 上的唯一区别是你失去了对 IE 6、7、8 的支持。和 B。你真的应该打电话库 - 像 jQuery - 来自他们适当的 CDN,例如。 &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.3/jquery.min.js"&gt;&lt;/script&gt; 并且不在本地托管它们。实际上,在本地托管它们比引用其 CDN 对性能的影响更大,因为您的大多数用户很可能已经缓存了该库。
  • 马库斯,感谢您的建议。我会这样做,但有一个问题是为了确保我正确理解你。引用他们的 CDN 不会影响应用离线或在线的工作方式,对吧?
  • 如果您正在寻找可以“离线”使用的应用程序(例如,没有互联网连接),然后通过 CDN 引用库(没有任何内部缓存机制 [即本地存储等])似乎不起作用。以此为借口,将库存储在本地以供离线使用是有意义的。
  • 好的,它应该也可以离线工作。有什么可靠的方法可以在本地存储库以供离线使用吗?有人谈论 Base64 编码?
  • 就像您目前拥有的那样就足够了。如果您的所有资产都存储在本地,那么您的应用程序仅依赖于最终用户拥有可以解释 JavaScript(和 HTML 等)的浏览器。我不认为这是一个问题大声笑。如果你想变得花哨,那里有很多 HTML5 的花哨,但为了加快开发过程,你可以简单地在本地引用资产(就像你目前一样;最好的情况),或内联 lib(和相关资产)直接进入您的文档(如果文档缓存未正确实施,则次要于前者)。

标签: javascript jquery cordova content-security-policy


【解决方案1】:

添加到内容安全指令:img-src 'self' data:;

<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-eval' 'unsafe-inline'; img-src 'self' data:">

这是根据 CSP 规范中的语法

link to answer and more info

【讨论】:

  • 这基本上禁用了 CSP。小心使用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2021-12-26
  • 2017-11-10
  • 2021-12-13
  • 2023-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多