Javascript 为什么bookmarklet脚本被阻止?网页CSP似乎还可以

Javascript 为什么bookmarklet脚本被阻止?网页CSP似乎还可以,javascript,content-security-policy,bookmarklet,Javascript,Content Security Policy,Bookmarklet,我有一个书签。当用户单击bookmarklet时,它会插入一小段代码。这段代码插入一个script元素,该元素依次获取执行该工作的实际脚本 这适用于大多数网站,但有些网站通过其内容安全策略阻止脚本。例如,他们可能有 content-security-policy: script-src 'self' 然而,有一些网站的脚本被阻止,但我看不出是什么政策阻止了它。例如,bbc.co.uk就是一个例子 在开发者工具网络选项卡中,它说myscript.js是 blocked(csp) 但是,我没有看

我有一个书签。当用户单击bookmarklet时,它会插入一小段代码。这段代码插入一个script元素,该元素依次获取执行该工作的实际脚本

这适用于大多数网站,但有些网站通过其内容安全策略阻止脚本。例如,他们可能有

content-security-policy: script-src 'self'
然而,有一些网站的脚本被阻止,但我看不出是什么政策阻止了它。例如,bbc.co.uk就是一个例子

在开发者工具网络选项卡中,它说myscript.js是

blocked(csp)
但是,我没有看到本页面的csp策略,就像我看到其他阻止脚本的网站一样

什么是阻止脚本请求

这是完整的bookmarklet代码。myscript.js被替换为通用库,以便其他人可以进行测试

javascript:(function(){var s=document.createElement('script');s.setAttribute('src','https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js?“+new Date().getTime());document.getElementsByTagName('body')[0]。appendChild;})()

更漂亮:

javascript:(function(){
    var s=document.createElement('script');
    s.setAttribute('src','https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js?'+new Date().getTime());
    document.getElementsByTagName('body')[0].appendChild(s);
})();

日期参数只是为了防止网页使用缓存版本。

bbc.co.uk
在meta标记中发布内容安全策略:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: http: https: 'unsafe-inline' 'unsafe-eval';
  frame-src edigitalsurvey.com chartbeat.com static2.chartbeat.com *.bbc.co.uk *.bbci.co.uk *.bbc.com *.bbci.com *.edigitalsurvey.com edigitalsurvey.com *.optimizely.com cdn-assets-prod.s3.amazonaws.com twitter.com *.twitter.com *.twimg.com riddle.com *.riddle.com;
  connect-src 'self' edigitalsurvey.com *.bbc.co.uk *.bbci.co.uk *.bbc.com *.bbci.com *.edigitalsurvey.com edigitalsurvey.com *.optimizely.com cdn-assets-prod.s3.amazonaws.com twitter.com *.twitter.com *.twimg.com;
  font-src 'self' *.bbc.co.uk *.bbci.co.uk *.bbc.com *.bbci.com *.edigitalsurvey.com edigitalsurvey.com *.optimizely.com cdn-assets-prod.s3.amazonaws.com twitter.com *.twitter.com *.twimg.com;
  form-action 'self' *.bbc.co.uk *.bbci.co.uk *.bbc.com *.bbci.com *.edigitalsurvey.com edigitalsurvey.com *.optimizely.com cdn-assets-prod.s3.amazonaws.com twitter.com *.twitter.com *.twimg.com;
  img-src 'self' app.optimizely.com cdn.optimizely.com data: https: http:;
  script-src 'self' static.chartbeat.com static2.chartbeat.com 'unsafe-inline' 'unsafe-eval' *.bbc.co.uk *.bbci.co.uk *.bbc.com *.bbci.com *.edigitalsurvey.com edigitalsurvey.com *.optimizely.com cdn-assets-prod.s3.amazonaws.com twitter.com *.twitter.com *.twimg.com optimizely.s3.amazonaws.com;
  style-src 'self' 'unsafe-inline' *.bbc.co.uk *.bbci.co.uk *.bbc.com *.bbci.com *.edigitalsurvey.com edigitalsurvey.com *.optimizely.com cdn-assets-prod.s3.amazonaws.com twitter.com *.twitter.com *.twimg.com" />

不幸的是,若网页有自己的CSP,它将阻止bookmarklet脚本