扩展程序和小书签的内容安全策略

2024-02-04

Github有以下内容内容安全政策 https://w3c.github.io/webappsec/specs/content-security-policy/:

内容安全策略:默认-src *;脚本-src asset-cdn.github.com www.google-analytics.com 收集器-cdn.github.com;对象-src 资产-cdn.github.com;样式-src '自我' '不安全内联' '不安全评估' asset-cdn.github.com; img 源文件 “自我”数据:assets-cdn.github.com identicons.github.com www.google-analytics.com Collector.githubapp.com *.githubusercontent.com *.gravatar.com *.wp.com;媒体-src“无”; frame-src 'self' render.githubusercontent.com www.youtube.com player.vimeo.com checkout.paypal.com;字体-src资产-cdn.github.com; connect-src 'self' ghconduit.com:25035 live.github.com uploads.github.com s3.amazonaws.com

我们可以使用 Evernote 或 Pocket 等服务的浏览器扩展从网络上剪辑/检索内容。

我在此 Github 政策中没有看到任何提及 Pocket 或 Evernote 的内容。有人可以解释一下为什么 Pocket 扩展能够从 Github 检索内容,而 Evernote 扩展却不能,有一个CSP错误 https://discussion.evernote.com/topic/64966-github-no-web-clipping/)

CSP 策略是否可以阻止加载小书签应用程序或浏览器扩展应用程序(例如 Clipper)?如果是这样,Pocket 如何才能使其扩展适用于任何内容?

我们的小书签/扩展程序中存在这个问题,我希望它们像 Pocket 扩展程序一样顺利工作,但我真的不知道从哪里开始......谢谢


Edit: 当人们在评论中询问代码时,我们的书签会加载以下 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 http://localhostssss.com:9000/assets/js/backbone/views/clipping/clippinglocal.js' 因为它违反了以下内容安全策略指令: “script-src 'unsafe-eval' 'unsafe-inline' 关于: https://.akamaihd.net http://.baidu.comhttps://bitly.com https://bitly.comhttps://.cloudfront.net https://.facebook.com https://.facebook.nethttps://getpocket.com https://getpocket.comhttps://.github.com https://.googleapis.comhttps://ssl.google-analytics.com https://ssl.google-analytics.com https://app.greenhouse.io https://app.greenhouse.iohttps://.medium.comhttps://myspace.com https://myspace.comhttps://.pinterest.comhttps://www.readability.com https://www.readability.com https://thinkery.me https://thinkery.me https://this.cm https://this.cmhttps://.twitter.comhttps://use.typekit.net https://use.typekit.nethttps://*.instapaper.com '自己'”。

有人可以告诉我如何使我们的书签可在具有 CSP 策略的 Medium 或 Github 等网站上加载。

我还不能过多谈论浏览器扩展,因为我还没有开发它,而且这个人也不在这里。我只知道我们有同样的问题,我们的浏览器扩展基本上与我们的书签相同的代码,只是它稍微适应了浏览器扩展外壳。如果您只能回答小书签的情况,我会同意并接受答案,但任何有关浏览器扩展的提示也很好:)


CSP 策略是否可以阻止加载小书签应用程序或浏览器扩展应用程序(例如 Clipper)?

非常简单:如果扩展程序或小书签违反了 CSP,它将被阻止。

因此,如果 CSP 阻止所有内联脚本,则任何小书签都不起作用。 Github 是这样做的media-src因为,通过简单地存在,“media-src”指令默认会阻止内联脚本。所以任何书签都不能在 Github 上运行。

(顺便说一句,即使所有浏览器都以这种方式工作,但这并不是标准所说应该发生的情况。Bookmarklet 实际上应该免除 CSP,但不幸的是没有浏览器愿意允许这样做。)

现在,至于哪些扩展可以工作或不能工作,这取决于扩展本身如何工作。 CSP 无法直接阻止扩展程序,但是,如果扩展程序尝试执行任何违反 CSP 的操作,则可能会失败。因此,在 Github 上,如果扩展尝试将本机脚本添加到页面的 DOM 中,或者尝试从未经批准的位置将外部脚本附加到页面的 DOM,或者执行 CSP 中描述的任何其他受限制的操作,则它可能会失败。

那么,Evernote 扩展的哪一部分导致了 CSP 错误,Pocket 如何在不导致错误的情况下完成类似的工作呢?我不知道。这一切都取决于这些应用程序的编写方式的具体细节。最有可能的是,查看他们的代码并尝试找出答案是非常简单的。据我所知,所有 Chrome 扩展程序都是用 JavaScript 编写的,并打包为 zip 文件 - 只是文件扩展名不同。我相信 Firefox 插件也是如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

扩展程序和小书签的内容安全策略 的相关文章

  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • Internet Explorer 9 是否会因数组和对象文字末尾的额外逗号而卡住?

    现代浏览器和 Node js 等环境允许您说 a 1 b 2 或 1 2 3 这在历史上一直是 Internet Explorer 的问题 Internet Explorer 9 中修复了此问题吗 对此有两种不同的答案 一种是对象初始值设定
  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt
  • Angular Libraries Monorepo:是否可以为每个库使用不同的版本?

    只是一个简单的问题 我似乎找不到答案 我正在尝试构建一个应该能够使用 angular cli v8 的 monorepo 但仍然能够编译和构建为 v2 v3 v4 等制作的库 主要是组件和服务 版本之间发生了很多变化 所以让我们举个例子 V
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 从输入类型编号获取无效值

    我正在使用输入类型数字 当它无效时 我如何从中获取值 例如 使用类型编号并仅打印 e 这本身是无效的 我正在使用 React 但我认为这个问题非常普遍 onChange event console log event target valu
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 无法使用 HTML 设置未定义 jQuery UI 自动完成的属性“_renderItem”

    我使用以下代码将 jQuery UI 自动完成项呈现为 HTML 这些项目在自动完成控件中正确呈现 但我不断收到此 JavaScript 错误并且无法移动过去 Firefox 无法转换 JavaScript 参数 Chrome 无法设置未定
  • 如何从 bootstrap-markdown.js 调用 .getContent 和 .parseContent

    我是使用 Bootstrap 插件的新手 刚刚通过代码学院 http www codecademy com en skills make an interactive website 我真的很想用这个很棒的引导 Markdown 插件 ht
  • 如何绘制大时间序列(数千次给药次数/药物剂量)?

    我正在尝试绘制医院中如何开出单一药物的图解 在这个虚拟数据库中 我在 2017 年 1 月 1 日之后遇到了 1000 名患者 绘图的目的是了解该药物的给药模式 在接近入院 出院或患者住院期间是否更频繁 高剂量给药 Get random d
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c
  • 如何在 Erlang 中将数字转换为单词?

    我发现了一个关于将数字转换为 单词 的有趣问题 代码高尔夫 数字到单词 https stackoverflow com questions 309884 code golf number to words 我真的很想看看你如何在 Erlan
  • Angularjs:两种方式的数据绑定和控制器重新加载

    如果使用路由和控制器 则模型不会在控制器重新加载之间保存其状态 Angular 在每个路由负载上创建控制器实例和新范围 例如 我在输入中键入具有 ng model something 的内容 转到另一条路线 然后返回第一条路线 我输入的所有
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp
  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO
  • 通过使用 navbarPanel() 并隐藏导航栏构建多页闪亮应用程序用户端(在 ui.R 中)?

    我想构建一个多页闪亮应用程序 我可以在其中控制用户可以看到哪个页面 迪安 阿塔利确实这个演示应用程序中有类似的东西 https github com daattali advanced shiny tree master multiple
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐