Mailvelope

0x1 谷歌插件介绍

谷歌工具条是Google公司推出的一款免费的IE浏览器工具栏插件,于2000年12月11日推出 [9]。它与IE浏览器工具栏集成,用户可直接输入关键词调用Google搜索,而无需访问Google主页 [4],并提供查看PageRank、阻止自动弹出窗口、自动填写表单、关键字高亮等功能。

谷歌插件的基本构成,一般来讲,谷歌插件包含Manifest文件、后台脚本、内容脚本、图标等多个文件构成。

谷歌插件及ChormeExtensions是一个小型的程序,它可以修改并增强chrome浏览器的功能。可以使用web技术(如HTML,CSS,JavaScript)来编写。一个扩展就是一个压缩的包,里面有HTML、CSS、JavaScript、图片或者任何你需要的资源。从本质上来讲,扩展就是一个web页面,它也可以使用浏览器为web页面提供的API

2 插件基础

2.1 创建manifest.json文件

任何谷歌插件都必须拥有的文件,这个文件的作用简单来说就是这个插件的组成清单,在这个清单上大约能看的这个插件的大体作用

下面是manifest.json的配置项

(1)Icons

插件的程序图标,可以一个或多个16的是插件页面图标48是管理界面图标

128是安装界面图标

(2)brower_action和page_action

这两个功能都是用来处理扩展在浏览器工具栏上的表现

区别是前者啥地方都能用后者是特定页面才能用

(3)default_popup

在用户点解扩展图标时可以设置弹出一个popup页面这个页面可以说是一个简单的网页也可以有自己的js脚本点击图标时运行此脚本

(4)Permissions

在background里使用一些chrmoeapi,需要授权才能使用。

2.2 background

background可以认为是插件运行是在浏览器中的一个后台脚本,与当前浏览页面无关。

Backgropund包括(page,scripts,persistent)

Page是后台网站的主页(不一定要求有)

Scripts就是后台引入的脚本文件

Persistent就是后台程序是否持久运行

2.3 content script

这部分脚本,简单来说是插入到网页中的脚本。它具有独立而富有包容性。所谓独立,指它的工作空间,命名空间,域等是独立的,不会说跟插入到的页面的某些函数和变量发生冲突。所谓包容性,指插件把自己的一些脚本(content script)插入到符合条件的页面里,作为页面的脚本,因此与插入的页面共享dom的,即用dom操作是针对插入的网页的,在这些脚本里使用的window对象跟插入页面的window是一样的。

主要用在消息传递上(使用postMessage和onmessage)

后台脚本,一般命名为 background.js,是插件的主要工作区域,可以监听浏览器事件,执行长时间运行的任务。

内容脚本,一般命名为 content.js,可以注入到符合指定匹配规则的网页中,用于操作网页的 DOM 节点、修改网页内容、与网页脚本进行交互等。

部署插件也比较简单,我们只需要在谷歌浏览器中打开网站:chrome://extensions/,找到加载已解压的扩展程序,就可以把我们调试中的插件部署到谷歌浏览器中查看结果。

调试起来也非常简单,可以按F12打开开发者工具,找到控制台,查看控制台的输出是否有异常,另外,插件本身也会在扩展程序的界面里显示自己出现的错误。

参考https://baike.baidu.com/item/%E8%B0%B7%E6%AD%8C%E5%B7%A5%E5%85%B7%E6%9D%A1/8728440

https://zhuanlan.zhihu.com/p/7460436407

https://cloud.tencent.com/developer/article/1695308

0x2 文件结构

0x3 Manifest介绍分析

Manifest文件的示例,它声明了插件的名称、描述、版本、权限等关键信息。

这个文件的作用简单来说就是这个插件的组成清单,在这个清单上大约能看的这个插件的大体作用

javascript 复制代码
//配置文件
{
//根据浏览器语言读取对应的messages.json
  "name": "__MSG_ext_name__",
//拓展名字短名称
  "short_name": "Mailvelope",
//替换版本号,版本号占位符
  "version": "@@mvelo_version",
//拓展描述
  "description": "__MSG_ext_description__",
//官方网站
  "homepage_url": "https://mailvelope.com",
  "author": "info@mailvelope.com",
  "manifest_version": 3,
  "minimum_chrome_version": "122",
//用户界面相关
  "action": {
//图标设置
    "default_icon": {
//不同大小
      "16": "img/Mailvelope/logo_signet_16.png",
      "24": "img/Mailvelope/logo_signet_24.png",
      "32": "img/Mailvelope/logo_signet_32.png",
      "48": "img/Mailvelope/logo_signet_48.png"
    },
    "default_popup": "components/action-menu/actionMenu.html",
    "default_title": "__MSG_ext_name__"
  },
//各种尺寸
  "icons": {
    "32": "img/Mailvelope/logo_signet_32.png",
    "48": "img/Mailvelope/logo_signet_48.png",
    "64": "img/Mailvelope/logo_signet_64.png",
    "96": "img/Mailvelope/logo_signet_96.png",
    "120": "img/Mailvelope/logo_signet_120.png",
    "128": "img/Mailvelope/logo_signet_128.png",
    "152": "img/Mailvelope/logo_signet_152.png",
    "180": "img/Mailvelope/logo_signet_180.png"
  },
//后台脚本,重点
  "background": {
    "service_worker": "background.bundle.js"
  },
//安全策略
//限制了扩展自己页面(如弹窗、选项页)可以加载的资源:
  · default-src 'self':所有资源(脚本、图片等)默认只能从扩展自身加载。
  · style-src 'unsafe-inline':允许内联样式。
  · img-src data::允许使用 data: 协议的图片(例如 base64 编码的小图标)。
  · connect-src https::允许通过 HTTPS 与服务器通信(如 API 调用)。

  "content_security_policy": {
    "extension_pages": "default-src 'self'; style-src 'unsafe-inline'; img-src data:; connect-src https:;"
  },
//国际化语言
  "default_locale": "en",
//允许访问所有网站url
  "host_permissions": [
    "*://*/*"
  ],
//协议
  "oauth2": {
//插件在谷歌api注册的客户端id
    "client_id": "119074447949-cvf898un7sfnv2ib7r4hvunqd56jm4c4.apps.googleusercontent.com",
//申请权限范围,权限设置
    "scopes":[

//userinfo.emai权限控制
//https://www.googleapis.com/auth谷歌所有api公用权限
//在谷歌中获取邮箱地址
      "https://www.googleapis.com/auth/userinfo.email",
//只读
      "https://www.googleapis.com/auth/gmail.readonly",
//读写
      "https://www.googleapis.com/auth/gmail.send"
    ]
  },
//可选权限,允许拓展与原生应用通信
  "optional_permissions": [
    "nativeMessaging"
  ],
//拓展选项页面
  "options_page": "app/app.html",
//声明必须的权限
  "permissions": [
    "alarms",
    "identity",
    "offscreen",
    "scripting",
    "storage",
    "tabs",
    "webNavigation"
  ],
//声明扩展可以直接被网页访问
  "web_accessible_resources": [{
    "resources": [
      "client-API/mailvelope-client-api.js",
      "components/decrypt-message/decryptMessage.html",
      "components/generate-key/genKey.html",
      "components/key-backup/backupKey.html",
      "components/restore-backup/backupRestore.html",
      "components/editor/editor.html",
      "components/encrypted-form/encryptedForm.html",
      "res/fonts/*.woff2",
      "img/edit_add-22.png",
      "img/key-24.png",
      "img/key-icon-blue96.png",
      "img/loading.gif",
      "img/mail_locked_96.png",
      "img/mail_signed_96.png",
      "img/mail_open_96.png",
      "img/mail_new.png",
      "img/ok48.png",
      "img/verify-24.png",
      "main.css"
    ],
//可以被所有网站访问
    "matches": ["*://*/*"]
  }]
}

00x1 oauth2

OAuth2.0是OAuth协议的延续版本,但不向下兼容OAuth 1.0(即完全废止了OAuth1.0)。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限。同时为Web应用,桌面应用和手机,和智能家居设备提供专门的认证流程。

OAuth 2.0 是一套关于授权的行业标准协议。

OAuth 2.0 允许用户授权第三方应用访问他们在另一个服务提供方上的数据,而无需分享他们的凭据(如用户名、密码)

OAuth 2.0的应用场景非常广泛,包括但不限于:

  • 第三方应用访问用户在其他服务上的信息,例如,一个应用通过OAuth 2.0访问用户在github.com上的数据。(只读)
  • 第三方应用代表用户执行操作,例如,一个邮件客户端应用通过OAuth 2.0发送用户的电子邮件。(有授权才可以读写)
  • 第三方应用使用OAuth 2.0实现用户的单点登录,例如,用户可以使用Github账号登录其他应用。(得那个应用支持github账号登录才行)

参考

https://cloud.tencent.com/developer/article/2418791

相关推荐
阿里云瑶池数据库1 小时前
如何破解多租户隔离与性能难题?PolarDB PostgreSQL实战指南
数据库·postgresql
倔强的石头_1 小时前
异构操作系统架构下的数据库表空间高级管理:路径兼容与自动化运维实战
数据库
倒霉熊dd2 小时前
Python 学习(第二部分:函数、模块与面向对象编程)
前端·数据库·python
无盐海2 小时前
Foundatio,内存,Redis 缓存
数据库·redis·缓存
六月雨滴2 小时前
Oracle 数据库内存管理
数据库·oracle
甲方大人请饶命2 小时前
SSM-基础
java·数据库·spring
Jackyzhe2 小时前
从零学习Kafka:幂等与事务
数据库·学习·kafka
六月雨滴2 小时前
Oracle 会话与进程管理
数据库·oracle
shark-chili2 小时前
基于claude code的redis慢查询指令复刻实践
数据库·redis·缓存