2016-09-08 20 views
1

我在網頁視圖使用它加載從Android應用程序的資產腳本的iframe如下: -如何將CSP限制爲file:/// url in chrome?

<script src='file:///android_asset/trusted-iframe-script.js'></script> 

現在我想對IFRAME內容的安全策略,使得沒有其他的腳本可以被加載。 爲此,我增加了以下內容的iframe CSP

script-src: 'file:///android_asset/trusted-iframe-script.js'; 

因爲文件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,但感覺類似於內聯整個腳本

什麼是正確的方式來限制只有文件的URL?

回答

0

總之,這不能用於沙盒iframe。

Chrome CSP不允許將文件網址列爲白名單作爲腳本src。你可以使用指令文件:(沒有任何url),並且如果iframe不是沙箱的話就可以工作。但是,這是一個壞主意,因爲

A.我的iframe沙盒,並且

B.這是一個無證的關鍵字可以隨時停止工作。

我也試着爲內容創建一個blob url,而不是將它傳遞給iframe,但除非您在iframe沙盒屬性上設置allow-same-origin,否則這也無法正常工作。

0

CSP的URI沒有引號 - 所以儘量script-src: file:///android_asset/trusted-iframe-script.js;

如果不起作用大多數Android瀏覽器都支持CSP2,它可以讓你指定一個散列支持的腳本。

0

如果CSP將 「頁」,其中包含你應該使用 的孩子-SRC的iframe上:指令,而不是腳本源:Source

然後,我會不使用如何包括斷言文件,你可以嘗試使用:

  • 兒童的src:文件:///android_asset/trusted-iframe-script.js

    //我不能測試它

  • 兒童源:文件系統:///android_asset/trusted-iframe-script.js

    // source,並檢查是否仍然需要請求訪問用戶

  • 孩子-SRC:https://your.trusted.website.com/trusted-iframe-script.js

    //這應該工作,但它需要有一個可信的服務器和應用程序必須連接到網絡(沒有明顯的條件)