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

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(使用前将#替换为@)

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

  • Android - 保留或删除应用程序卸载时创建的文件

    我创建了一个应用程序 用于创建文件并将其存储到 SD 卡 有没有办法将文件夹与应用程序绑定 以便当用户在 Android 设备上运行卸载时删除所有文件 自 2009 年以来似乎有了一些进展 来自文档 http developer andro
  • 是否可以“保护”属性并将其从选择语句中排除

    我想保护数据层级别的某些属性 例如 我想保护用户存储在数据库中的密码哈希 以便它不会以任意形式显示select 声明 仅当在 a 中明确请求时才采用这种方式select property property2陈述 我认为更准确的答案是设置se
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E
  • 检查php中位字段是否打开的正确方法是什么

    检查位字段是否打开的正确方法是什么 在 php 中 我想检查来自 db mysql 的位字段是否打开 这是正确的方法吗 if bit 1 还有其他方法吗 我看到有人使用代码ord http jameslow com 2008 08 12 m
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • CSS:缩放字体大小以适应父块元素的高度

    我发现的几乎每个问题和答案都谈到了视口大小 这确实不是我的问题 拿着这支笔 https codepen io njt1982 pen pZjZNM https codepen io njt1982 pen pZjZNM 我有一个非常基本的
  • 如何在Windows上正确使用node.js child_process.spawn()重定向?

    我有一个干净的 Windows 8 1 盒子 安装了最新的 node js v0 10 29 我在两个文件中有以下测试代码 a js var sub require child process spawn node b js silent
  • 如何检测用户是否禁用 GPS(Android - Play 服务)

    我使用 gms location LocationListener Google Play 服务 来获取用户的位置 它工作正常 但我想检测用户何时禁用或启用他 她的 GPS 就像这张照片一样 当我打开 关闭位置时 不会调用任何方法 当我切换
  • 如何处理两个 gradle 插件的任务冲突?

    我使用 gradle 和两个插件com jfrog artifactory and io swagger core v3 swagger gradle plugin 现在我想按照此处所述进行配置https github com swagge
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • 我找不到 IntelliJ 快捷方式

    我使用 vim 一段时间 我知道有一个 intellij vim 插件 我很好奇内置的 IntelliJ 文本导航存在什么 如何打开实时模板来创建模板 如何查看以 tr 开头的现有模板列表 如何进行全局搜索并在当前文档中进行搜索 然后转到下
  • 使用剪贴板 SetText 换行

    如何使用 SetText 方法添加换行符 I tried Clipboard SetText eee n xxxx 但当我将剪贴板数据粘贴到记事本中时 它没有给我预期的结果 预期结果 eee xxxx 我怎样才能做到这一点 Windows
  • 如何使用NetLogo发送参数?

    我对 NetLogo 还很陌生 这就是我被困在这里几周的原因 我想做的是让特工分成 2 队 4 人一组 我的计划是让一个函数保存 4 个海龟 ID to assign groupmates a1 a2 a3 a4 并将他们分配到团队 1 a
  • Libgdx 和 Google 应用内购买结果

    我遵循了这些指示 https github com libgdx libgdx wiki Interfacing with platform specific code使用 ActionResolver 接口集成 Libgdx 和原生 An
  • 添加两个 ActiveRecord::Relation 对象[重复]

    这个问题在这里已经有答案了 如何将两个关系添加在一起 当我尝试 运算符时 它返回一个数组 但我需要它来返回关系 谢谢 麦克风 Try new relation relation merge another relation
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se
  • Tensorflow Eager Execution 不适用于学习率衰减

    在这里尝试让一个热切的执行模型与 LR 衰减一起工作 但没有成功 这似乎是一个错误 因为学习率衰减张量似乎没有更新 如果我遗漏了什么 你可以帮我一下吗 谢谢 下面的代码正在学习一些词嵌入 但是 那学习率衰减部分根本不起作用 class Wo
  • 如何过滤 Solr 中多值字段返回的值

    我有一个文档 其中包含一个名为 uuid 的字段 该字段是一个列表 多值 每个文档最多可以有 100k 个值 例如 我想搜索与以 5ff6115e 开头的 uuid 匹配的文档 我已经可以通过使用成功做到这一点q uuids 5ff6115
  • 使用 JQuery 预填充选择字段的下拉选项验证

    我有这个 JQuery 片段来防止选择已在另一个字段中选择的下拉选项 var coll select name service on change function coll each function var val this value
  • 搜索引擎如何找到相关内容? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Google 在解析网络时如何找到相关内容 例如 Google 使用 PHP 原生 DOM 库来解析内

随机推荐