2015-04-23 164 views
0

我知道這可能只是我很愚蠢,但在Chrome頁面中,頁面加載的URL以chrome-extension://開頭,那麼腳本可以在線或使用eval();?我知道瀏覽器或頁面肌動蛋白或應用程序窗口無法使用它。部分我的擴展程序打開一個正常的新標籤頁,其頁面使用eval();在Chrome瀏覽器擴展程序中使用eval()://第

+0

查看清單中的權限文檔 –

+0

https://developer.chrome.com/extensions/contentSecurityPolicy(如果我有時間,我可能會發佈一個適當的答案) – Xan

+0

@ZigMandel權限不會改變任何內容。 – Xan

回答

2

chrome-extension://原點運行的所有頁面都受到了默認的內容安全策略描述here,具體如下:

script-src 'self'; object-src 'self' 

與不可見的背景頁面一樣,彈出窗口也被認爲是這樣的頁面。如果你從你的擴展中打開一個文件,它也會受到它的影響。

您可以:

  • 放鬆(或緊縮)的默認策略與清單的所有網頁:

    "content_security_policy": "[POLICY STRING GOES HERE]" 
    

    這種方式,您可以通過添加'unsafe-eval'script-src允許eval和朋友。

    您還可以通過將外部腳本添加到策略來加載外部腳本;但是,由於MitM保護原因,只允許HTTPS源。

    但是,請務必記住'unsafe-inline'將被忽略,無論您的自定義策略如何。

  • 放鬆(或收緊)特定頁面的默認策略declaring it sandboxed

    "sandbox": { 
        "pages": [ 
        "page1.html", 
        "directory/page2.html" 
        ] 
        // content_security_policy is optional. 
        "content_security_policy": 
         "sandbox allow-scripts; script-src https://www.google.com" 
    ], 
    

    沙盒CSP可以更放任,但仍然有一些限制。

    沙盒的價格無法訪問Chrome API。沙盒腳本必須通過DOM消息與一些特權頁面進行通信才能執行特權操作。

    有文檔中的指導,"Using eval in Chrome Extensions. Safely."


對於應用程序,情況就有點不同。再次,默認(和更嚴格的)CSP適用,但you cannot modify it in the manifest。但是,沙盒方法仍然有效。

相關問題