在英特尔XDK内部使用CSP失败

时间:2016-04-05 18:18:30

标签: html5 cordova intel-xdk content-security-policy

好的,所以我有这个带有不同端点的web api来调用不同的json值,例如:

https://example.com/api/values

https://example.com/api/othervalues

我只在cordova白名单中的网络请求中添加了uri https://example.com/api/,它运行良好,可以从两个端点调用。

然而

当尝试使用CSP(http://www.html5rocks.com/en/tutorials/security/content-security-policy/#reporting)(https://software.intel.com/en-us/articles/cordova-whitelisting-with-intel-xdk-for-ajax-and-launching-external-apps)执行相同的操作时,它在构建或应用预览(iOS)时无法正常工作,但它可以在模拟器中运行。

这个是我正在使用的代码失败但在计算机上的模拟器中工作

<meta http-equiv="Content-Security-Policy" content="default-src 'self' https://example.com/api/valuest/; img-src 'self' https://example.com/api/othervalues; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com/;  script-src 'self' 'unsafe-inline'">

这个随处可见,即构建,模拟器,应用预览

<meta http-equiv="Content-Security-Policy" content="default-src 'self' * https://example.com/api/valuest/; img-src 'self' https://example.com/api/othervalues; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com/;  script-src 'self' 'unsafe-inline'">

在默认src中查找*,这是唯一的区别,所以显然有些东西不允许在第一个<meta>标签中运行,但我找不到什么。我确实尝试了所有其他资源指令,唯一有效的是在默认的src中添加*。

立即

我现在正在考虑使用cordova白名单并跳过内容安全策略。我对安全性知之甚少但是......这可能不够吗?该应用程序只能在移动设备(不是计算机应用程序)上运行,这应该会让我更难攻击吗?根据我的理解,从这个链接(http://www.html5rocks.com/en/tutorials/security/content-security-policy/#inline-code-considered-harmful)阅读,如果我拒绝内联脚本,使用CSP几乎会更好,否则它就像cordova白名单一样有用?

如果有人对此有任何意见或建议,我非常感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

我尝试编辑代码示例以使其更具可读性。

我的猜测是你必须指定你的网络服务的URL,如下所示:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' https://example.com/; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com/;  script-src 'self' 'unsafe-inline'">

您不必指定服务的确切网址,而是指定您信任的来源的网址。另请注意,如果您将https://example.com/设置为default-src,则无需将其设置为img-src,因为default-src将覆盖未专门设置的任何其他指令。

“进一步阅读”:

对我来说,甚至可以将使用过的Web服务的URL设置为connect-src,这更具限制性(因此可以提供更好的保护)。当然这取决于你如何与服务器进行交互,你提到的html5rocks文章是一个很好的来源,可以找出你可能想要使用的内容...无论如何,使用connect-src的可能的元标记可能看起来像这样的东西:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; connect-src 'self' https://example.com/; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com/;  script-src 'self' 'unsafe-inline'">