拒绝加载图像,因为它违反了内容安全策略 -- Cordova

14

我正在尝试按照code-push文档部署我的应用程序。然后,我将以下内容添加到我的应用程序index.html中的content-security。

<meta http-equiv="Content-Security-Policy" content="default-src https://codepush.azurewebsites.net 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

我添加完之后,我的应用程序就无法运行了。当我运行我的 Cordova 浏览器时,在控制台中看到了许多错误。原来是我的样式文件来自 Github,我的图像来自 mysite.com/...,我的其他外部脚本和 goopleapis 都不符合我的安全策略。

<meta http-equiv="Content-Security-Policy" content="default-src * 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

现在它能够很好地工作。我的问题是,安全影响是什么?我应该保持这种方式吗?我应该如何更好地做到这一点?任何帮助或意见将不胜感激。我担心离开 * 可能会允许旨在停止的攻击。

2个回答

12

你说得对,如果保持这种 CSP 的话会让攻击者更容易入侵。使用 CSP 的主要思想是 URL 白名单,可以在这里找到相关描述。

通过使用万能字符*来将所有内容添加到白名单中,一旦攻击者能够注入代码到你的应用程序中,他就允许从任何地方加载代码(并执行)。看一下这篇链接的文章吧,它比我在这里写的好多了 ;)

那么正确的做法是什么呢?

  1. 查明您要将哪些域名添加到白名单中以及该域名提供的资源类型
  2. 摆脱通配符,只为需要的资源精确添加可信域名到白名单中。例如,假设您要从 GitHub 加载样式表,请添加类似于以下内容的语句将 GitHub 添加为一个可信域名:style-src 'self' https://github.com 'unsafe-inline';

注意:要小心使用default-src策略,因为它会覆盖其他策略。当涉及到白名单图片时,您可能需要添加data:关键字,如下所示:img-src 'self' http://somedomain.com data:;

Mozilla的文档相当不错,如果您想获取所有策略和关键字的概述,可以查看一下。


这些文档真的很有帮助。如果这个问题没有回答你的所有疑问,可以去查看一下。 - Kent Bull

3
解决方案:

解决方法:

script-src 'self' http://xxxx 'unsafe-inline' 'unsafe-eval'; 

3
这段代码解决了我在 Cordova + Phaser3 中加载图片的问题。<meta http-equiv="Content-Security-Policy" content="script-src 'self' http://localhost:5000 'unsafe-inline' 'unsafe-eval';"> - bFunc
1
抱歉,可能是个愚蠢的问题,但当你写 http:/xxxx 时,它应该是我的网站的URL吗? - bellotas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接