扩展程序对网站和大多数 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 权限(带有警告)。
开发依赖权限并作为可选警告的功能,并引入这些功能 功能可以自然地向用户介绍该扩展程序,而且无需承担任何风险。此外, 让用户能够通过扩展程序进一步自定义自己的体验,从而创造机会 解释警告。
替换 activeTab 权限
activeTab
权限可授予对用户所在网站的临时访问权限,并允许
扩展程序以使用当前标签页上的 "tabs"
权限。它取代了
在很多情况下,"<all_urls>"
,并且在安装时不会显示任何警告。
不使用 activityTab:
使用 activityTab:
activeTab
权限会在发生以下情况时,授予扩展程序对当前活跃标签页的临时访问权限:
<用户> 调用扩展程序。如果扩展程序遭到入侵,攻击者需要等待
用户在获得访问权限之前调用该扩展程序,并且该访问权限将持续到
您可以浏览或关闭该标签页
为标签页启用 activeTab
权限后,扩展程序可以:
- 调用该标签页上的
tabs.executeScript
或tabs.insertCSS
。 - 通过一个会返回
tabs.Tab
对象的 API 获取相应标签页的网址、标题和网站图标。 - 使用 webRequest 拦截标签页中发送到标签页主框架源的网络请求 API。该扩展程序会暂时获取标签页主框架源的主机权限。
以下用户手势可启用 activeTab
:
- 执行浏览器操作
- 执行网页操作
- 执行上下文菜单项
- 通过 commands API 执行键盘快捷键
- 通过多功能框 API 接受建议
授予访问权限
如果扩展程序需要访问 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>"
。如需验证系统显示的最新扩展程序权限警告,请按照下列步骤操作:
查看警告中的步骤。
权限 | 说明 | 警告 |
---|---|---|
|
向所有主机授予扩展程序访问权限。您可以使用以下代码来避免声明任何主机权限 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.tabs 和 chrome.windows。在
在很多情况下,该扩展程序无需声明 "tabs" 权限即可使用
这些 API。 |
读取您的浏览记录 |
"topSites" |
向扩展程序授予对 chrome.topSites API 的访问权限。 | 读取您最常访问的网站的列表 |
"ttsEngine" |
向扩展程序授予对 chrome.ttsEngine API 的访问权限。 | 读出使用合成语音说出的所有文字 |
"webNavigation" |
向扩展程序授予对 chrome.webNavigation API 的访问权限。 | 读取您的浏览记录 |
更新权限
更新具有额外权限的扩展程序可能会暂时停用该扩展程序。用户必须 在同意所有新警告后重新启用此模式。
如果用户手动更新现在包含 tabs 权限的扩展程序,则将获得 在管理页面上显示警告。
如果扩展程序自动更新,则在用户同意新的更新之前,该扩展程序将处于停用状态 权限。
为避免出现这种情况,您可以将新功能设为可选,并在
optional_permissions
。