我在webview中有一个iframe,它使用以下内容从Android应用程序的资产加载脚本: -
<script src='file:///android_asset/trusted-iframe-script.js'></script>
现在我希望在iframe上有一个内容安全策略,以便不能加载其他脚本。 为此,我将以下内容添加到iframe CSP
script-src: 'file:///android_asset/trusted-iframe-script.js';
这不起作用,因为chrome忽略了文件uri。
The source list for Content Security Policy directive 'script-src' contains an invalid source: 'file:///android_asset/trusted-iframe-script.js'. It will be ignored.
Refused to load the script 'file:///android_asset/trusted-iframe-script.js' because it violates the following Content Security Policy directive: "script-src file:///android_asset/trusted-iframe-script.js".
我读过有关文件系统uri的内容,但这需要请求访问用户,但实际上我只需要访问自己的资产而不是文件系统。我还读到了关于blob:urls但是感觉类似于内联整个脚本
csp限制为仅限文件网址的正确方法是什么?
答案 0 :(得分:0)
CSP URI没有引号 - 请尝试script-src: file:///android_asset/trusted-iframe-script.js;
如果这不起作用,大多数Android浏览器现在都支持CSP2,它允许您为支持的脚本指定哈希值。
答案 1 :(得分:0)
如果CSP设置在&#34;页面&#34;其中包含您应该使用的iframe child-src:指令代替 script-src:(Source)
然后,我没有使用如何包含断言文件,您可以尝试:
child-src:file:///android_asset/trusted-iframe-script.js
//我无法测试
child-src:filesystem:///android_asset/trusted-iframe-script.js
// source并检查是否仍需要请求访问用户
child-src:https://your.trusted.website.com/trusted-iframe-script.js
//这应该有效,但它需要有一个受信任的服务器,而且应用必须连接到网络(没有明显的条件)
答案 2 :(得分:0)
简而言之,对于沙盒iframe无法做到这一点。
Chrome CSP不允许将文件网址列为脚本src列入白名单。你可以使用指令文件:(没有任何url),如果iframe没有沙盒,那将会有效。但这是一个坏主意,因为
一个。我的iframe是沙箱,
B中。这是一个未记录的关键字,可能随时停止工作。
我还尝试为内容创建一个blob网址,然后将其传递给iframe,但除非您在iframe沙箱属性上设置allow-same-origin,否则它也无效。