一、描述

扩展程序访问网站和大多数 Chrome API 的能力取决于其声明的权限。

权限应仅限于其功能所需的权限。

如果扩展程序受到攻击者的攻击,则限制权限减少对数据入侵的可能性。

可以通过显示的声明、最小的权限申请以及用户可选择权利来保护扩展程序以及扩展程序的使用用户。

二、组织扩展程序的权限

permission 是指向 chrome API 或者是 match 匹配模式的已知字符串,权限是分为多个的,因此也就是一个列表。

permission 是在 manifest 的 permission 字段 和 optional_permissions 字段中配置说明的,其中 permissions 是扩展程序一定需要依赖的权限,而 optional_permission 则取决于用户是否愿意提供。

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

我们应当尽量限制申请的权限,只要扩展程序的核心功能足够了即可。

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

三、确定所需要的权限

一个简单的扩展程序可能需要请求多个权限,多个权限在安装时会显示警告。

用户更有可能信任具有有限警告的扩展程序,或者扩展程序向用户解释了权限的作用。

因此,除了确定扩展程序的核心功能以及扩展程序所需的权限之外,如果需要提示警告的权限,尽量考虑绕过去。

1.png

四、触发带事件的可选权限

官方有一个示例是覆盖一个新的 tab 页的,地址: https://developer.chrome.com/extensions/samples#search:optional

用到了 storage 权限,不过不会警告

这个扩展程序还有一个额外的功能:显示用户的热门网站。此功能需要 topSites 权限,该权限会警告用户是否授权。

2.png

当你授权之后,会显示用户经常访问的页面:

3.png

代码我已经传到了 github 上,文章结尾会有。

四、替换 activeTab 权限

activeTab 授予用户所在站点的临时访问权限,并允许扩展程序使用当前选项卡上的 tabs 权限。

在许多情况下,它取代了对 <all_urls> 的需求,并且在安装时不显示任何警告。

当用户调用扩展时,activeTab 权限授予对当前活动选项卡的扩展程序临时访问权限

如果扩展程序受到攻击,攻击者需要等待用户在获取访问权限之前调用扩展,并且该访问只会持续到导航或关闭选项卡。

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

  • 在选项卡上调用 tabs.executeScripttabs.insertCSS 方法
  • 通过 tabs.Tab 对象拿到 URL、标题和 favicon
  • 使用 webRequest API 拦截选项卡中对选项卡主框架源的网络请求。扩展程序临时获取选项卡主框架源的主机权限。

下面的需要用户手动的启用 activeTab:

  • 执行 browser_action
  • 执行 page_action
  • 执行 context menu item
  • 执行 commands 配置的快捷键
  • 执行 omnibox 的建议搜索

五、允许访问

如果扩展程序需要访问 file:// 这样的网址或者是以隐身模式去运行,则用户需要在扩展程序详细信息页面的 chrome://extensions 中启用对这些功能的访问权限。

1.jpg

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

六、了解权限

权限警告用于描述 API 向 扩展程序 的用户索取功能,但是这些警告中的一些警告信息可能一开始并不明显。

或者,添加 tabs 权限会引起看似无关紧要的警告:因为扩展程序能够读取你的浏览活动。

虽然 chrome.tabs API 可能仅用于打开新的选项卡,但是也可以用来使用 tab.Tab 对象查看与每个新打开选项卡关联的 URL。

因此应该尽量的使用或者申请最小权限。

七、查看警告

如果将扩展程序作为解压缩文件加载(也就是开发的时候),则不会显示权限警告。

如果要查看扩展程序的权限警告,需要导航至 chrome:// extensions,确保已经启用开发者模式,然后点击打包扩展程序。

在你的扩展程序的根目录字段中指定扩展名文件夹的路径,然后点击打包扩展程序按钮。忽略首次打包的私钥字段。

2.jpg

打包成功之后:

3.jpg

.pem 私钥文件非常重要,需要自己妥善保存好,因为私钥文件是可以用来更新扩展程序的。

通过 chrome 扩展程序安装 .crx 文件:

4.jpg

安装成功之后,可以点击查看详情,能够看到具体的权限:

5.jpg

有警告的权限列表

可以在这个表中查看当前会触发告警的权限有哪些:

https://developer.chrome.com/extensions/permission_warnings#permissions_with_warnings

八、更新权限

如果你更新了扩展程序,则用户在更新完之后,可能会需要重新授权某些程序。

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

myextension_tabs.png

如果扩展程序是自动更新,则用户在同意新的权限之前,是被禁用掉的。

extension_disabled.png

通过使可选并向清单中的 optional_permissions 添加新的权限更新,可以避免这种情况。