[07] chrome 扩展开发 - 声明权限并告知用户
一、描述
扩展程序访问网站和大多数 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
}
我们应当尽量限制申请的权限,只要扩展程序的核心功能足够了即可。
可选功能所需的权限应注册为可选权限。这允许用户决定他们愿意提供多少访问扩展以及期望哪些功能。
三、确定所需要的权限
一个简单的扩展程序可能需要请求多个权限,多个权限在安装时会显示警告。
用户更有可能信任具有有限警告的扩展程序,或者扩展程序向用户解释了权限的作用。
因此,除了确定扩展程序的核心功能以及扩展程序所需的权限之外,如果需要提示警告的权限,尽量考虑绕过去。
四、触发带事件的可选权限
官方有一个示例是覆盖一个新的 tab 页的,地址: https://developer.chrome.com/extensions/samples#search:optional
用到了 storage 权限,不过不会警告
这个扩展程序还有一个额外的功能:显示用户的热门网站。此功能需要 topSites
权限,该权限会警告用户是否授权。
当你授权之后,会显示用户经常访问的页面:
代码我已经传到了 github 上,文章结尾会有。
四、替换 activeTab 权限
activeTab 授予用户所在站点的临时访问权限,并允许扩展程序使用当前选项卡上的 tabs
权限。
在许多情况下,它取代了对 <all_urls>
的需求,并且在安装时不显示任何警告。
当用户调用扩展时,activeTab 权限授予对当前活动选项卡的扩展程序临时访问权限
如果扩展程序受到攻击,攻击者需要等待用户在获取访问权限之前调用扩展,并且该访问只会持续到导航或关闭选项卡。
虽然为选项卡启用了 activeTab 权限,但扩展可以:
- 在选项卡上调用
tabs.executeScript
和tabs.insertCSS
方法 - 通过
tabs.Tab
对象拿到 URL、标题和 favicon - 使用
webRequest API
拦截选项卡中对选项卡主框架源的网络请求。扩展程序临时获取选项卡主框架源的主机权限。
下面的需要用户手动的启用 activeTab:
- 执行
browser_action
- 执行
page_action
- 执行
context menu item
- 执行
commands
配置的快捷键 - 执行
omnibox
的建议搜索
五、允许访问
如果扩展程序需要访问 file://
这样的网址或者是以隐身模式去运行,则用户需要在扩展程序详细信息页面的 chrome://extensions
中启用对这些功能的访问权限。
扩展程序可以通过 extension.isAllowedIncognitoAccess()
或者在 file:// URL
使用 extension.isAllowedFileSchemeAccess
检测来是否在隐身模式下启可用。
六、了解权限
权限警告用于描述 API 向 扩展程序 的用户索取功能,但是这些警告中的一些警告信息可能一开始并不明显。
或者,添加 tabs
权限会引起看似无关紧要的警告:因为扩展程序能够读取你的浏览活动。
虽然 chrome.tabs
API 可能仅用于打开新的选项卡,但是也可以用来使用 tab.Tab
对象查看与每个新打开选项卡关联的 URL。
因此应该尽量的使用或者申请最小权限。
七、查看警告
如果将扩展程序作为解压缩文件加载(也就是开发的时候),则不会显示权限警告。
如果要查看扩展程序的权限警告,需要导航至 chrome:// extensions
,确保已经启用开发者模式,然后点击打包扩展程序。
在你的扩展程序的根目录字段中指定扩展名文件夹的路径,然后点击打包扩展程序按钮。忽略首次打包的私钥字段。
打包成功之后:
.pem
私钥文件非常重要,需要自己妥善保存好,因为私钥文件是可以用来更新扩展程序的。
通过 chrome 扩展程序安装 .crx
文件:
安装成功之后,可以点击查看详情,能够看到具体的权限:
有警告的权限列表
可以在这个表中查看当前会触发告警的权限有哪些:
https://developer.chrome.com/extensions/permission_warnings#permissions_with_warnings
八、更新权限
如果你更新了扩展程序,则用户在更新完之后,可能会需要重新授权某些程序。
果用户手动更新现在包含选项卡权限的扩展程序,则他们将在管理页面上收到警告。
如果扩展程序是自动更新,则用户在同意新的权限之前,是被禁用掉的。
optional_permissions
添加新的权限更新,可以避免这种情况。
文章版权:Postbird-There I am , in the world more exciting!
本文链接:http://www.ptbird.cn/chrome_extensions_permission_warnings.html
转载请注明文章原始出处 !