当前位置: 首页 > 知识库问答 >
问题:

拒绝加载脚本,因为它违反了以下内容安全策略指令

易英奕
2023-03-14

当我尝试将我的应用程序部署到Android系统高于5.0.0(Lollipop)的设备上时,我不断收到以下错误消息

07-03 18:39:21.621:D/SystemWebChromeClient(9132):file:///android_asset/www/index.html: 第0行:拒绝加载脚本的http://xxxxx'因为它违反了以下内容安全策略指令:“script src'self''unsafe eval''unsafe inline'。07-03 18:39:21.621:I/chromium(9132):[信息:控制台(0)]“拒绝加载脚本”http://xxx'因为它违反了以下内容安全策略指令:“script src'self''unsafe eval''unsafe inline'。

但是,如果我将其部署到Android系统4.4. x(奇巧)的移动设备,安全策略与默认的工作:

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

然后我想,也许我应该换成这样:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'; style-src 'self' 'unsafe-inline'; media-src *">

基本上,两种选择都不适合我。我如何解决这个问题?

共有3个答案

叶华皓
2023-03-14

对于希望获得完整解释的任何人,我建议您查看内容安全策略:https://www.html5rocks.com/en/tutorials/security/content-security-policy/.

“代码来自https://mybank.com 应该只能访问https://mybank.com的数据,以及https://evil.example.com 绝对不应该被允许访问。每个来源都与web的其他部分隔离”

XSS攻击基于浏览器无法区分应用程序代码和从其他网站下载的代码。因此,您必须使用“<代码>内容安全策略< /代码> HTTP头”来考虑您认为安全下载内容的内容来源。

使用一系列策略指令描述此策略,每个指令都描述特定资源类型或策略区域的策略。您的策略应该包括一个默认的src policy指令,当其他资源类型没有自己的策略时,该指令是它们的后备策略。

所以,如果你修改你的标签为:

<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 *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">

您是说您正在授权从源'self'执行JavaScript代码(script src)http://onlineerp.solution.quebec“不安全的内联”“不安全的评估”

我想前两个对于您的用例是完全有效的,我对其他的有点不确定<代码>'safe-line''safe-eval'会造成安全问题,因此除非您有非常特殊的需要,否则不应使用它们:

“如果eval及其文本到JavaScript兄弟对您的应用程序来说是完全必要的,您可以通过在script src指令中添加‘unsafe eval’作为允许的源来启用它们。但是,同样,请不要这样做。禁止执行字符串的能力会使攻击者更难在您的站点上执行未经授权的代码。”(迈克·韦斯特,谷歌)

徐鑫鹏
2023-03-14

解决方法是:

script-src 'self' http://xxxx 'unsafe-inline' 'unsafe-eval';
穆铭晨
2023-03-14

MagngooSasa给出的自我回答成功了,但对于其他试图理解答案的人来说,这里有一些更详细的信息:

在使用Visual Studio开发Cordova应用程序时,我尝试导入一个远程JavaScript文件[位于此处]http://Guess.What.com/MyScript.js],但我有标题中提到的错误。

以下是项目的index.html文件中前面的meta标记:

<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 *">

以下是正确的元标记,以允许导入远程脚本:

<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 *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">

不要再犯错误了!

 类似资料: