声明权限并警告用户

扩展程序对网站和大多数 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
}

仅授予扩展程序核心功能所需的权限。一个 扩展程序不应请求超出其当前需要的权限;不能通过 请求更新所需的权限。

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

确定所需权限

简单的扩展程序可能需要请求多项权限,且系统会显示许多权限 warnings。用户更有可能信任那些只会收到少量警告或 。

安装时,显示扩展程序权限警告

确定扩展程序的核心功能及其所需权限。考虑 将功能设为可选功能。

利用事件触发可选权限

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

用于启用其他功能的“扩展程序”按钮

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

针对 topSites API 的扩展程序警告

开发依赖权限并作为可选警告的功能,并引入这些功能 功能可以自然地向用户介绍该扩展程序,而且无需承担任何风险。此外, 让用户能够通过扩展程序进一步自定义自己的体验,从而创造机会 解释警告。

替换 activeTab 权限

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

不使用 activityTab:

无 activityTab 的权限界面

使用 activityTab:

包含 activityTab 的权限界面

activeTab 权限会在发生以下情况时,授予扩展程序对当前活跃标签页的临时访问权限: <用户> 调用扩展程序。如果扩展程序遭到入侵,攻击者需要等待 用户在获得访问权限之前调用该扩展程序,并且该访问权限将持续到 您可以浏览或关闭该标签页

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

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

以下用户手势可启用 activeTab

授予访问权限

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

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

扩展程序可通过调用 extension.isAllowedIncognitoAccess()或能够在file://包含 extension.isAllowedFileSchemeAccess()

了解权限

存在权限警告来说明 API 向扩展程序用户授予的功能,但 其中一些警告一开始可能并不明显。例如,添加 "tabs" 权限只能显示看起来无关的警告:该扩展程序可以读取您的浏览活动 activity。虽然 chrome.tabs API 可能仅用于打开新标签页,但它也可以用来 使用每个新打开的标签页的 tabs.Tab 对象来查看与其相关联的网址。

请尽可能实现可选权限或使用功能略弱的 API,以免收到警报 警告。

查看警告

如果某个扩展程序以解压缩文件的形式加载,系统将不会显示权限警告。要查看 扩展程序的权限警告,请前往 chrome://extensions,确保已启用开发者模式 然后点击软件包扩展

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

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

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

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

打包的扩展程序文件

切勿丢失私钥!.pem 文件保存在秘密安全的位置;时间将是 需要更新该扩展程序。

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

拖放文件即可安装

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

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

收到警告的权限

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

权限 说明 警告
  • "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" 向扩展程序授予对原生消息传递 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 的访问权限。 读取您的浏览记录

更新权限

更新具有额外权限的扩展程序可能会暂时停用该扩展程序。用户必须 在同意所有新警告后重新启用此模式。

如果用户手动更新现在包含 tabs 权限的扩展程序,则将获得 在管理页面上显示警告。

添加标签页权限

如果扩展程序自动更新,则在用户同意新的更新之前,该扩展程序将处于停用状态 权限。

扩展程序已停用

同意授予权限

为避免出现这种情况,您可以将新功能设为可选,并在 optional_permissions