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