如何将CSP限制为chrome:/// urls in chrome?

时间:2016-09-08 10:53:30

标签: google-chrome content-security-policy

我在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限制为仅限文件网址的正确方法是什么?

3 个答案:

答案 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,否则它也无效。