好的,所以我有这个带有不同端点的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白名单一样有用?
如果有人对此有任何意见或建议,我非常感谢您的帮助,谢谢!
答案 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'">