声明权限并警告用户
扩展程序访问网站和大多数 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)
一个简单的扩展可能需要请求多个权限,许多权限在安装时会显示警告。用户更有可能信任带有有限警告或向他们解释权限的扩展程序。
确定扩展的核心功能及其所需的权限。如果功能需要带有警告的权限,请考虑将功能设为可选。
# 使用事件触发可选权限
可选权限示例扩展的核心功能是覆盖新标签页。一项功能是显示用户当天的目标。此功能只需要存储权限,不包含警告。
该扩展程序有一个附加功能;显示用户的热门网站。此功能需要 topSites 权限,该权限有警告。
开发依赖于带有警告的权限的功能作为可选,并有机地引入这些功能为用户提供了对扩展的无风险介绍。此外,这允许用户通过扩展进一步定制他们的体验,并创造解释警告的机会。
# 替换 activeTab 权限
activeTab 权限授予对用户所在站点的临时访问权限,并允许扩展程序在当前选项卡上使用“tabs”权限。它在许多情况下取代了对“
Without activeTab:
With activeTab:
当用户调用扩展程序时,activeTab 权限授予扩展程序对当前活动选项卡的临时访问权限。如果扩展程序遭到破坏,攻击者需要等待用户调用扩展程序才能获得访问权限,并且该访问权限只会持续到导航或关闭选项卡。
虽然为选项卡启用了 activeTab
权限,但扩展程序可以:
- 在该选项卡上调用 scripting.insertCSS
- 通过返回 tabs.Tab 对象的 API 获取该选项卡的 URL、标题和网站图标。
- 使用 webRequest API 将选项卡中的网络请求拦截到选项卡的主框架源。该扩展程序临时获取选项卡主框架来源的主机权限。
以下用户手势启用 activeTab
:
- 执行浏览器操作(browser action)
- 执行页面操作(page action)
- 执行上下文菜单项(context menu item)
- 从命令(commands) API 执行键盘快捷键
- 接受来自多功能框 ( omnibox)API 的建议
# 允许访问( 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。
在扩展根目录字段中指定扩展文件夹的路径,然后单击打包扩展按钮。忽略首次包的私钥字段(Private key)。
Chrome 将创建两个文件,一个 .crx
文件和一个 .pem
文件,其中包含扩展程序的私钥。
不要丢失私钥!将 .pem
文件保存在一个秘密和安全的地方;需要更新扩展。
通过将 .crx
文件拖放到 Chrome 扩展的管理页面来安装它。
删除 .crx
文件后,浏览器将询问是否可以添加扩展并显示警告。
# 有警告的权限(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.tabs 和 chrome.windows。在许多情况下,扩展程序不需要声明“tabs ”权限来使用这些 API |
阅读您的浏览历史 |
"topSites" |
授予您的扩展程序访问权限 chrome.topSites API. | 阅读您最常访问的网站列表 |
"ttsEngine" |
授予您的扩展程序访问权限 chrome.ttsEngine API. | 阅读使用合成语音说出的所有文本 |
"webNavigation" |
授予您的扩展程序访问权限chrome.webNavigation API. | 阅读您的浏览历史 |
# 更新权限(Update permissions)
使用其他权限更新扩展程序可能会暂时禁用它。用户在同意任何新警告后必须重新启用它。
如果用户手动更新现在包含选项卡(tabs)权限的扩展,他们将在管理页面上收到警告。
如果扩展自动更新,它将被禁用,直到用户同意新的权限。
这可以通过将新功能设为可选并向清单(manifest)中的 optional_permissions 添加新的权限更新来避免。
By.一粒技术服务