声明权限并警告用户

扩展程序访问网站和大多数 Chrome API 的能力取决于其声明的权限。权限应仅包含实现其功能所需的内容。通过限制权限,可以建立扩展程序的功能,并减少在扩展程序遭到攻击者入侵时可能发生的数据攻击。实现显式权限、最低权限和可选权限来保护扩展程序及其用户。

整理权限

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

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

仅针对扩展程序核心功能需要的权限进行限制。扩展程序请求的权限不应超出其当前需要的权限;不得通过请求更新可能需要的权限来适应未来变化。

可选功能所需的权限应注册为可选权限。这样,用户就可以决定他们愿意为扩展程序提供多少访问权限以及需要哪些功能。

确定所需权限

简单的扩展程序可能需要请求多项权限,并且许多权限会在安装时显示警告。如果扩展程序只显示有限的警告,或向用户说明权限,用户更有可能信任扩展程序。

安装时扩展程序权限警告

确定扩展程序的核心功能及其需要的权限。如果功能需要权限并显示警告,请考虑将功能设为可选。

通过事件触发可选权限

可选权限示例扩展程序的核心功能会替换新标签页。 其中一项功能是显示用户当天的目标。此功能只需要存储权限,该权限不包括警告。

可启用更多功能的“扩展程序”按钮

该扩展程序还具有一项额外的功能,即显示用户最常访问的网站。此功能需要 topSites 权限(该权限会显示警告)。

针对 topSites API 的扩展程序警告

开发依赖于权限但可选的功能,并以自然方式引入这些功能,可以让用户毫无风险地介绍该扩展程序。此外,这也允许用户使用扩展程序进一步自定义他们的体验,并创造机会解释警告。

替换 activeTab 权限

activeTab 权限会授予对用户所在网站的临时访问权限,并允许扩展程序使用当前标签页的 "tabs" 权限。在许多情况下,它不需要使用 "<all_urls>",并且在安装时不显示任何警告。

不使用 ActiveTab:

不含 ActiveTab 的权限界面

使用 ActiveTab 时:

包含 activityTab 的权限界面

activeTab 权限会在用户调用扩展程序时,向该扩展程序授予对当前活跃标签页的临时访问权限。如果扩展程序遭到入侵,攻击者需要等到用户调用扩展程序后才能获得访问权限,而且这种访问仅会持续到相应标签页导航或关闭为止。

针对标签页启用 activeTab 权限后,扩展程序可以:

  • 对该标签页调用 tabs.executeScripttabs.insertCSS
  • 通过返回 tabs.Tab 对象的 API 获取该标签页的网址、标题和网站图标。
  • 使用 webRequest API 拦截标签页中对标签页主框架源的网络请求。该扩展程序会暂时获取标签页主框架源的主机权限。

以下用户手势可启用 activeTab

授予访问权限

如果某个扩展程序需要访问 file:// 网址或在无痕模式下运行,用户需要在该扩展程序的详情页面中 (chrome://extensions) 内启用这些功能的访问权限。

允许在扩展程序详情页面上使用文件网址和无痕模式

扩展程序可通过调用 extension.isAllowedIncognitoAccess() 检测其是否已在无痕模式下启用,或能否使用 extension.isAllowedFileSchemeAccess()file:// 网址上运行。

了解权限

权限警告旨在描述 API 向扩展程序用户授予的功能,但其中一些警告一开始可能并不明显。例如,添加 "tabs" 权限会引发看似不相关的警告:扩展程序可以读取您的浏览 activity。虽然 chrome.tabs API 可能仅用于打开新标签页,但也可用于查看与每个新打开的标签页相关联的网址(使用相应的 tabs.Tab 对象)。

尽可能实现可选权限或功能不太强大的 API,以避免收到警告。

查看警告

如果扩展程序作为解压缩的文件加载,则不会显示任何权限警告。如需查看扩展程序的权限警告,请前往 chrome://extensions,确保已启用开发者模式,然后点击打包扩展程序

已选中开发者模式,然后点击“打包扩展程序”

在“扩展程序根目录”字段中指定扩展程序文件夹的路径,然后点击打包扩展程序按钮。对于首次使用软件包,请忽略 Private key 字段。

指定扩展程序路径,然后点击“打包扩展程序”

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

打包的扩展程序文件

切勿丢失私钥!请将 .pem 文件保存在安全可靠的地方;更新扩展程序时需要用到此文件。

.crx 文件拖放到 Chrome 扩展程序的“管理”页面中,以便进行安装。

拖放文件即可安装

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

关于“新标签页”扩展程序的警告

包含警告的权限

注意:我们会尽最大努力更新权限表,因此这些表可能会与当前警告略有不同。此外,某些权限在与其他权限配对时可能不会显示警告。例如,如果扩展程序也请求 "<all_urls>",系统不会显示 "tabs" 警告。如需验证针对扩展程序权限显示的最新警告,请按照查看警告中的步骤操作。

权限 说明 警告
  • "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')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 geolocation 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(包括 chrome.tabschrome.windows)使用的 Tab 对象的特权字段的访问权限。在许多情况下,扩展程序无需声明 "tabs" 权限即可使用这些 API。 读取您的浏览记录
"topSites" 向此扩展程序授予对 chrome.topSites API 的访问权限。 读取您最常访问的网站列表
"ttsEngine" 向此扩展程序授予对 chrome.ttsEngine API 的访问权限。 朗读使用合成语音说出的所有文字
"webNavigation" 向扩展程序授予对 chrome.webNavigation API 的访问权限。 读取您的浏览记录

更新权限

更新具有额外权限的扩展程序可能会暂时停用该扩展程序。在用户接受新的警告后,必须重新启用该设置。

如果用户手动更新现已包含标签页权限的扩展程序,则会在管理页面上收到警告。

添加标签页权限

如果扩展程序自动更新,则会停用,直到用户同意新权限为止。

扩展程序已停用

同意授予权限

如需避免此问题,请将新功能设为可选,并在清单中向 optional_permissions 添加新的权限更新。