github 页上 Disqus 的 CSP 错误
CSP error with Disqus on github pages
我有一个 jekyll based blog on github pages 评论由 Disqus 提供。或者更准确地说:他们过去常常由 Disqus 提供服务。我发现,Disqus 的东西加载失败。
在 Chrome 中,我在控制台中看到以下错误:
Refused to load the script 'data:application/javascript;base64,KGZ1bmN0aW9uKCkgewoJdmFyIG5vb3BmbiA9IGZ1…gpKTsKCQkJfQoJCX0KCX0pKCk7Cgl3aW5kb3cuX2dhcSA9IGdhcS5xZiA9IGdhcTsKfSkoKTs=' because it violates the following Content Security Policy directive: "script-src https://.twitter.com: https://a.disquscdn.com .services.disqus.com: https://c.disquscdn.com http://.twitter.com: https://apis.google.com/js/api.js http://a.disquscdn.com https://cdn.syndication.twimg.com/tweets.json https://.services.disqus.com: https://connect.facebook.net/en_US/sdk.js https://referrer.disqus.com/juggler/ 'unsafe-eval' a.disquscdn.com http://disqus.com https://ssl.google-analytics.com https://disqus.com".
我最初认为 Disqus 在做一些愚蠢的事情,但我发现 this article 这让我觉得我做错了什么,比如使用 jquery 来加载 Disqus。但是我看不出是什么导致了这个问题。
我的另一个想法是,也许我的 cookie 横幅或 privace badger 导致了问题,但 Privacy Badger 配置为仅阻止 google 网站上的分析,甚至允许这样做,也没有成功工作。
当 运行 jekyll serve
在本地时,一切都按预期工作。
我排除了 cookie 横幅作为问题的根源,暂时删除它,对 Disqus 没有任何影响
我不认为 this SO question 是同一个问题,因为我没有 iframe。
我的实际问题由三部分组成:
- 如何调试这样的问题?
- 问题的根本原因是什么?
- 我该如何解决?
在您的 disqus_config
中,您有:
this.page.url = 'http://blog.schauderhaft.dehttp://blog.schauderhaft.de/';
因为硬编码基数 URL 和 | prepend: site.url
in _includes/disqus.html
:
this.page.url = 'http://blog.schauderhaft.de{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}';
这应该可以正常工作:
this.page.url = '{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}';
如果禁用所有扩展,CSP 错误应该会消失。这可能是 Disqus 试图解决他们在启用 CSP 时无法正确测试的阻止程序;没有来源很难说。
我有一个 jekyll based blog on github pages 评论由 Disqus 提供。或者更准确地说:他们过去常常由 Disqus 提供服务。我发现,Disqus 的东西加载失败。
在 Chrome 中,我在控制台中看到以下错误:
Refused to load the script 'data:application/javascript;base64,KGZ1bmN0aW9uKCkgewoJdmFyIG5vb3BmbiA9IGZ1…gpKTsKCQkJfQoJCX0KCX0pKCk7Cgl3aW5kb3cuX2dhcSA9IGdhcS5xZiA9IGdhcTsKfSkoKTs=' because it violates the following Content Security Policy directive: "script-src https://.twitter.com: https://a.disquscdn.com .services.disqus.com: https://c.disquscdn.com http://.twitter.com: https://apis.google.com/js/api.js http://a.disquscdn.com https://cdn.syndication.twimg.com/tweets.json https://.services.disqus.com: https://connect.facebook.net/en_US/sdk.js https://referrer.disqus.com/juggler/ 'unsafe-eval' a.disquscdn.com http://disqus.com https://ssl.google-analytics.com https://disqus.com".
我最初认为 Disqus 在做一些愚蠢的事情,但我发现 this article 这让我觉得我做错了什么,比如使用 jquery 来加载 Disqus。但是我看不出是什么导致了这个问题。
我的另一个想法是,也许我的 cookie 横幅或 privace badger 导致了问题,但 Privacy Badger 配置为仅阻止 google 网站上的分析,甚至允许这样做,也没有成功工作。
当 运行 jekyll serve
在本地时,一切都按预期工作。
我排除了 cookie 横幅作为问题的根源,暂时删除它,对 Disqus 没有任何影响
我不认为 this SO question 是同一个问题,因为我没有 iframe。
我的实际问题由三部分组成:
- 如何调试这样的问题?
- 问题的根本原因是什么?
- 我该如何解决?
在您的 disqus_config
中,您有:
this.page.url = 'http://blog.schauderhaft.dehttp://blog.schauderhaft.de/';
因为硬编码基数 URL 和 | prepend: site.url
in _includes/disqus.html
:
this.page.url = 'http://blog.schauderhaft.de{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}';
这应该可以正常工作:
this.page.url = '{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}';
如果禁用所有扩展,CSP 错误应该会消失。这可能是 Disqus 试图解决他们在启用 CSP 时无法正确测试的阻止程序;没有来源很难说。