17

Github上具有以下Content Security Policy內容安全策略和書籤

內容安全-政策:默認-SRC *; script-src assets-cdn.github.com www.google-analytics.com collector-cdn.github.com; object-src assets-cdn.github.com; style-src 'self''unsafe-inline''unsafe-eval'assets-cdn.github.com; img-src 'self'data:assets-cdn.github.com identicons.github.com www.google-analytics.com collector.githubapp.com * .githubusercontent.com * .gravatar.com * .wp.com ; media-src'none'; frame-src'self'render.githubusercontent.com www.youtube.com player.vimeo.com checkout.paypal.com; font-src assets-cdn.github.com; 連接-SRC「自我」 ghconduit.com:25035 live.github.com uploads.github.com s3.amazonaws.com

我們可以剪輯/與服務的瀏覽器擴展檢索的網頁內容喜歡的Evernote或口袋。

我在這個Github政策中沒有看到任何對Pocket或Evernote的引用。有人可以解釋爲什麼Pocket擴展能夠從Github檢索內容,而Evernote擴展沒有,具有CSP error

CSP策略是否可以防止加載小書籤應用或瀏覽器擴展應用(如裁剪器)?如果是這樣,Pocket如何能夠在任何內容上進行擴展?

我們已經在我們的bookmarklet /擴展這個問題,我想他們的工作掌上擴展順利,但我真的不知道從哪裏開始...謝謝


編輯: 隨着人們在評論中要求的代碼,我們的書籤加載這個JavaScript:

javascript: (function() { 
    function loadScript(a, b) { 
     var c = document.createElement('script'); 
     c.type = 'text/javascript'; 
     c.src = a; 
     var d = document.getElementsByTagName('head')[0], 
      done = false; 
     c.onload = c.onreadystatechange = function() { 
      if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) { 
       done = true; 
       b() 
      } 
     }; 
     d.appendChild(c) 
    } 
    loadScript('http://localhostsss.com:9000/assets/js/backbone/views/clipping/clippinglocal.js', function() { 
     s.clipping.initClipping() 
    }) 
})() 

如果我嘗試在一個頁面中,其中有一個CSP推出這個書籤,我得到以下錯誤。

拒絕加載腳本 'http://localhostssss.com:9000/assets/js/backbone/views/clipping/clippinglocal.js' 因爲它違反了以下內容安全策略指令: 「腳本的src'不安全-EVAL '不安全內聯' 有關: https://開頭。 akamaihd.net HTTP:// .baidu.com https://bitly.com https://開頭.cloudfront.net https://開頭 .facebook.com https://開頭.facebook.net https://getpocket.com https://開頭 .github .com https:// .googleapis.com https://ssl.google-analytics.comhttps://app.greenhouse.io https://開頭 .medium.com https://myspace.com https://開頭.pinterest.com https://www.readability.comhttps://thinkery.mehttps://this.cm https://開頭 .twitter.com https://use.typekit.net的https://*.instapaper.com 自我「」。

有人可以告訴我如何使我們的書籤可加載在像中等或Github的網站上,這些網站有CSP策略。

我不能談論這麼多關於瀏覽器擴展的問題,因爲我還沒有開發它,而且這個人不在這裏。我只知道我們有同樣的問題,我們的瀏覽器擴展與我們的bookmarklets基本上是相同的代碼,只是它有點適合瀏覽器擴展外殼。如果你只能回答書籤的情況下,我會沒事的,接受答案,但任何提示瀏覽器擴展將不錯:)

+0

我可以請求更多的上下文嗎?這是關於github應用程序或網頁的問題嗎? evernote與evernote應用程序或網頁有問題嗎?如果這是github應用程序的問題,並且您希望允許您的應用程序與evernote網站通信,則需要在manifest.json中添加權限。 – 2014-08-27 16:54:05

+0

@ petewil-G我們正在開發一款類似Evernote/Pocket的剪輯器,我們需要能夠使用CSP策略(如Github或Medium)剪輯網站上的內容。我們同時擁有書籤和瀏覽器擴展('manifest.json'不適用於我認爲的bookmarklets) – 2014-08-27 17:11:24

+0

請刪除google-chrome-app標記,因爲此問題與Chrome應用無關。 – 2014-08-27 20:51:23

回答

17

CSP政策可以防止書籤小應用程序或瀏覽器擴展應用程序一個剪輯器加載?

這很簡單:如果擴展名或小書籤違反CSP,它將被阻止。

因此,如果CSP阻止所有內聯腳本,則不會有小書籤工作。 Github通過media-src來做到這一點,因爲默認情況下,通過「media-src」指令阻止內聯腳本。所以沒有書籤可以在Github上工作。

(作爲一個方面說明,即使所有的瀏覽器以這種方式工作,這不是標準說會發生什麼。小書籤其實應該從CSP豁免,但遺憾的是沒有任何瀏覽器都不屑於允許這一點。)

現在,至於哪些擴展工作或不工作,取決於擴展本身的工作方式。擴展不能被CSP直接阻止,但是,如果擴展嘗試做違反CSP的任何操作,它可能會失敗。因此,在Github上,如果擴展嘗試將本地腳本添加到頁面的DOM中,或者嘗試從未批准的位置向頁面的DOM附加外部腳本,或者執行CSP中描述的其他任何受限制的事件,則可能會失敗。

那麼,Evernote擴展的哪一部分會導致CSP錯誤,以及Pocket如何執行類似的工作而不會導致錯誤?我不知道。這一切都取決於如何寫這些應用程序的具體細節。最有可能的是,查看他們的代碼並嘗試弄清楚它是非常簡單的。據我所知,所有Chrome擴展程序都是用JavaScript編寫的,並且打包爲一個zip文件 - 只是具有不同的文件擴展名。我相信火狐插件也是如此。

+1

感謝您的洞察力。你怎麼知道bookmarklets應該免於CSP而瀏覽器沒有實現呢?有沒有在瀏覽器上打開的問題? – 2014-08-28 09:31:58

+0

您是否認爲我們的擴展程序無法正常工作,因爲它實際上並未包含整個應用程序代碼,而是試圖從遠程URL加載代碼?這意味着我們可能需要將所有擴展代碼打包到同一個zip文件中,而不是將其加載到遠程。 – 2014-08-28 09:33:44

+0

我發現了這個問題:http://code.google.com/p/chromium/issues/detail?id=233903 – 2014-08-28 09:37:58