声明权限并警告用户

扩展程序访问网站和大多数 Chrome API 的能力取决于其声明的权限。权限应仅限于其功能所需的权限。如果扩展程序被攻击者破坏,限制权限可以建立扩展程序的功能并减少对数据的可能入侵。通过实施明确的、最小的和可选的权限来保护扩展程序及其用户。

# 整理权限(Organize permissions)

权限是指 Chrome API 或匹配模式的已知字符串,这些模式授予对一个或多个主机的访问权限。它们列在清单中并指定为必需权限或可选权限

{
  "name": "Permissions Extension",
  ...
  // required permissions
  "permissions": [
    "activeTab",
    "contextMenus",
    "storage"
  ],
  // optional permissions
  "optional_permissions": [
    "topSites",
  ],
  "host_permissions": [
    "https://www.developer.chrome.com/*"
  ],
  ...
  "manifest_version": 3
}

将所需的权限限制为扩展的核心功能所需的权限。扩展不应请求比当前需要更多的权限;不要通过请求更新可能需要的权限来证明未来。

可选功能所需的权限应注册为可选权限。这允许用户决定他们愿意提供多少访问权限以及需要哪些功能。

确定所需的权限(Identify required permissions)

一个简单的扩展可能需要请求多个权限,许多权限在安装时会显示警告。用户更有可能信任带有有限警告或向他们解释权限的扩展程序。

21

确定扩展的核心功能及其所需的权限。如果功能需要带有警告的权限,请考虑将功能设为可选。

# 使用事件触发可选权限

可选权限示例扩展的核心功能是覆盖新标签页。一项功能是显示用户当天的目标。此功能只需要存储权限,不包含警告。

22

该扩展程序有一个附加功能;显示用户的热门网站。此功能需要 topSites 权限,该权限有警告。

23

开发依赖于带有警告的权限的功能作为可选,并有机地引入这些功能为用户提供了对扩展的无风险介绍。此外,这允许用户通过扩展进一步定制他们的体验,并创造解释警告的机会。

# 替换 activeTab 权限

activeTab 权限授予对用户所在站点的临时访问权限,并允许扩展程序在当前选项卡上使用“tabs”权限。它在许多情况下取代了对“”的需求,并且在安装时不显示警告。

Without activeTab:

24

With activeTab:

25

用户调用扩展程序时,activeTab 权限授予扩展程序对当前活动选项卡的临时访问权限。如果扩展程序遭到破坏,攻击者需要等待用户调用扩展程序才能获得访问权限,并且该访问权限只会持续到导航或关闭选项卡。

虽然为选项卡启用了 activeTab 权限,但扩展程序可以:

  • 在该选项卡上调用 scripting.insertCSS
  • 通过返回 tabs.Tab 对象的 API 获取该选项卡的 URL、标题和网站图标。
  • 使用 webRequest API 将选项卡中的网络请求拦截到选项卡的主框架源。该扩展程序临时获取选项卡主框架来源的主机权限。

以下用户手势启用 activeTab

# 允许访问( Allowing access)

如果扩展程序需要访问 file:// URL 或在隐身模式下运行,则用户需要在扩展程序的详细信息页面 chrome://extensions 中启用对这些功能的访问。

扩展程序可以通过调用 extension.isAllowedIncognitoAccess() 来检测它是否在隐身模式下启用,或者是否可以在 file:// URL 上使用 extension.isAllowedFileSchemeAccess() 运行。

# 了解权限(Understanding permissions)

权限警告用于描述 API 授予扩展用户的功能,但其中一些警告一开始可能并不明显。例如,添加“标签(tabs)”权限会导致看似无关的警告:扩展程序可以读取您的浏览活动。尽管 chrome.tabs API 可能仅用于打开新选项卡,但它也可用于通过使用 tabs.Tab 对象查看与每个新打开的选项卡关联的 URL。

在可能的情况下,实施可选权限或功能较弱的 API 以避免发出警报。

# 查看警告(Viewing warnings)

如果将扩展名作为解压缩文件加载,则不会显示权限警告。要查看扩展程序的权限警告,请导航到 chrome://extensions,确保已启用开发人员模式,然后单击 PACK EXTENSION。

27

在扩展根目录字段中指定扩展文件夹的路径,然后单击打包扩展按钮。忽略首次包的私钥字段(Private key)。

28

Chrome 将创建两个文件,一个 .crx 文件和一个 .pem 文件,其中包含扩展程序的私钥。

29

不要丢失私钥!.pem 文件保存在一个秘密和安全的地方;需要更新扩展。

通过将 .crx 文件拖放到 Chrome 扩展的管理页面来安装它。

30

删除 .crx 文件后,浏览器将询问是否可以添加扩展并显示警告。

31

# 有警告的权限(Permissions with warnings)

注意:权限表是尽最大努力更新的,可能与当前警告存在轻微差异。此外,某些权限在与其他权限配对时可能不会显示警告。例如,如果扩展程序还请求“<all_urls>”,“tabs”警告将不会显示。要验证针对扩展程序权限显示的最新警告,请按照查看警告中的步骤操作。

要验证针对扩展程序权限显示的最新警告,请按照查看警告中的步骤操作。

Permission Description Warning
"http://*/*"``"https://*/*"``"*://*/*"``"<all_urls>" 授予对所有主机的扩展访问权限。使用 activeTab 权限可以避免声明任何主机权限。 阅读和更改您访问的网站上的所有数据
"https://HostName.com/" 授予对“https://HostName.com/”的扩展访问权限。使用 activeTab 权限可以避免声明任何主机权限。 HostName.com 上读取和更改您的数据
"bookmarks" 授予您的扩展程序访问 chrome.bookmarks API 的权限。 阅读和更改您的书签
"clipboardRead" 如果扩展使用,则需要document.execCommand('paste'). 读取您复制和粘贴的数据
"clipboardWrite" 表示扩展使用 document.execCommand('copy') or document.execCommand('cut'). 修改您复制和粘贴的数据
"contentSettings" 授予您的扩展程序访问权限chrome.contentSettings API. 更改控制网站访问 cookie、JavaScript、插件、地理定位、麦克风、摄像头等功能的设置。
"debugger" 授予您的扩展程序访问权限 chrome.debugger API. 访问页面调试器后端 ,阅读和更改您访问的网站上的所有数据
"declarativeNetRequest" 授予您的扩展程序访问权限chrome.declarativeNetRequest API. 阻止页面内容
"desktopCapture" 授予您的扩展程序访问权限chrome.desktopCapture API. 捕获屏幕内容
"downloads" 授予您的扩展程序访问权限 chrome.downloads API. 管理您的下载
"geolocation" 允许扩展程序在不提示用户许可的情况下使用 HTML5 地理定位 API。 检测您的物理位置
"history" 授予您的扩展程序访问权限 chrome.history API. 阅读和更改您的浏览历史记录
"management" 授予您的扩展程序访问权限 chrome.management API. 管理您的应用、扩展程序和主题
"nativeMessaging" 授予您的扩展程序访问权限 native messaging API. 与合作的本机应用程序通信
"notifications" 授予您的扩展程序访问权限 chrome.notifications API. 显示通知
"pageCapture" 授予您的扩展程序访问权限 chrome.pageCapture API. 阅读和更改您访问的网站上的所有数据
"privacy" 授予扩展程序访问权限 chrome.privacy API. 更改与隐私相关的设置
"proxy" 授予您的扩展程序访问权限 chrome.proxy API. 阅读和更改您访问的网站上的所有数据
"system.storage" 授予您的扩展程序访问权限chrome.system.storage API. 识别并弹出存储设备
"tabCapture" 授予您的扩展程序访问权限 chrome.tabCapture API. 阅读和更改您访问的网站上的所有数据
"tabs" 授予扩展程序访问多个 API 使用的 Tab 对象的特权字段的权限,包括 chrome.tabschrome.windows。在许多情况下,扩展程序不需要声明“tabs”权限来使用这些 API 阅读您的浏览历史
"topSites" 授予您的扩展程序访问权限 chrome.topSites API. 阅读您最常访问的网站列表
"ttsEngine" 授予您的扩展程序访问权限 chrome.ttsEngine API. 阅读使用合成语音说出的所有文本
"webNavigation" 授予您的扩展程序访问权限chrome.webNavigation API. 阅读您的浏览历史

# 更新权限(Update permissions)

使用其他权限更新扩展程序可能会暂时禁用它。用户在同意任何新警告后必须重新启用它。

如果用户手动更新现在包含选项卡(tabs)权限的扩展,他们将在管理页面上收到警告。

32

如果扩展自动更新,它将被禁用,直到用户同意新的权限。

33

34

这可以通过将新功能设为可选并向清单(manifest)中的 optional_permissions 添加新的权限更新来避免。

By.一粒技术服务

results matching ""

    No results matching ""