隐私政策
一、一句话摘要
Gray Hole 默认是一款纯本地工具。摘录存在你自己浏览器的 IndexedDB 里,不经过我们的服务器——因为我们没有用来收集摘录的服务器。云同步是一个可选的附加功能:只有你在账户页主动注册并登录之后,摘录才会被镜像到云端。
我们不投放广告,不接入任何第三方分析统计 SDK,不抓取你的浏览历史,也不训练任何模型。
二、数据存在哪里
| 数据 | 存放位置 | 前提 |
|---|---|---|
| 摘录正文、标题、标签、收藏夹 | 你浏览器的 IndexedDB(数据库名 tata-clipper-v1) | 默认,始终 |
| 你保存的图片字节 | 同上,以 Blob 形式本地保存 | 默认,始终 |
| 界面偏好、主题、演示种子标记 | 同上,settings 表 | 默认,始终 |
| 邮箱、密码哈希、用户 ID | 云端(Supabase 托管数据库) | 仅当你注册账号 |
| 摘录行的云端镜像 | 云端(Supabase 托管数据库) | 仅当你注册账号并开启云同步 |
| 登录凭证(访问令牌) | 本机浏览器存储(扩展:chrome.storage.local;站点:该站点的 localStorage) | 仅当你注册账号 |
数据存放位置:云同步后端使用 Supabase,数据库位于美国西部(俄勒冈)。官网静态页面由 Cloudflare 的全球边缘网络分发,不存储你的账号数据。
这涉及跨境数据传输。如果你不在美国,注册账号即意味着你的邮箱地址与摘录镜像会被传输并存储到美国的服务器上。
我们选择这个区域是为了保证服务可用性,但你需要知道这一点——尤其当你打算摘录涉及个人信息、商业秘密或受本地法规约束的内容时。
不想跨境传数据?完全可以不用云同步。不注册账号时,Gray Hole 的全部功能(采集、整理、搜索、导出)都在你本机完成,没有任何数据离开你的设备。这也正是我们把本地模式做成默认的原因。
三、账号数据
注册只需要一个邮箱地址和一个密码。我们存的是:
- 邮箱地址——用于登录、找回密码和必要的账号通知;
- 密码哈希——由 Supabase Auth 以不可逆方式派生后存储。我们(以及任何能读到数据库的人)都无法看到你的明文密码,也无法从哈希反推出它;
- 用户 ID——一个随机 UUID,作为云端各表中数据行归属与隔离的依据;
- 注册时间与一个由邮箱前缀自动生成的显示名。
我们不要求也不接收手机号、真实姓名、身份证件、头像或任何社交账号授权。
四、云同步数据
当云同步开启后,下列字段会以整行镜像的方式写入云端,只写给你自己:
| 表 | 字段 |
|---|---|
clips |
摘录正文与 Markdown 副本、标题、来源信息(平台、厂商、页面标题、页面地址)、定位锚点、所属收藏夹、标签、星标与归档状态、回收站标记、内容类型、内容指纹、图片的链接与元数据、创建与修改时间 |
collections |
收藏夹名称、匹配关键词、创建与修改时间 |
profiles |
用户 ID、显示名、注册时间 |
assets |
图片字节的云端副本。此表已建好但当前版本未启用,图片在你各设备上仍以本地副本保留 |
来源地址可能包含私密信息。为了让摘录能回到原文,我们保留原始页面地址。如果那个地址里带着会话 ID、查询参数或一次性令牌,它们也会被一起保存下来。这一点在本地和云端都成立。
因此:导出的 JSON 备份、以及云端镜像,都请当作不适合公开分享的内容对待。我们不对这些字段做额外的应用层加密——数据库层的加密由托管方提供。
五、我们不做的事
- 不自动保存整页,不遍历你的历史对话,不读取输入框,不监听键盘输入;
- 不采集你访问了哪些网站、停留多久、点击了什么;
- 不在扩展或站点里嵌入分析统计 SDK、广告 SDK、行为追踪像素或第三方字体;
- 不把摘录内容用于训练模型,也不提供给任何第三方做模型训练;
- 不出售、出租或以任何形式向广告商提供你的任何数据;
- 不在收藏库里自动加载外部图片当缩略图——否则你每次翻看收藏都会向原作者服务器暴露一次请求。
六、浏览器权限逐条用途
扩展申请的每一项权限,都对应一个具体功能。没有「预留」的权限。
| 权限 | 用途 |
|---|---|
storage | 在本地保存设置、登录凭证与短时撤销记录 |
unlimitedStorage | 存放摘录正文与你保存的图片字节。图片单张上限 8 MB、单条摘录最多 8 张,默认配额容易不够 |
contextMenus | 提供「加入 Gray Hole:选中文字」与「加入 Gray Hole:这张图片」两个右键菜单项 |
sidePanel | 把收藏库显示在浏览器侧栏里,不打断你正在读的页面 |
activeTab | 在你主动点击工具栏图标时,读取当前标签页的标题与地址,作为摘录的来源信息 |
clipboardWrite | 把摘录整理成 Markdown 复制到剪贴板,供你粘贴到别处 |
<all_urls>(内容脚本匹配 http/https) | 在网页上显示选中浮条。这是核心功能的前提。只有你主动选中文字或右键时,它才读取你选中的那一段;在你点保存之前,内容不会写进收藏库,也不会发往任何服务器 |
内容脚本运行在封闭的 Shadow DOM 里。页面自身的脚本拿不到摘录正文;插件也没有开放任何供页面调用的保存接口。chrome:// 开头的浏览器内部页面不允许扩展注入,我们也就读不到。
七、完整的联网清单
下面是 Gray Hole 可能发起的全部网络请求,没有别的:
| 场景 | 请求目标 | 触发条件 |
|---|---|---|
| 备份一张图片 | 该图片的原始地址 | 你主动保存了一张图片。请求使用 credentials: omit 与 referrerPolicy: no-referrer,不携带你的登录 Cookie,也不带来源页。图片服务器仍能看到你的 IP |
| 注册 / 登录 / 找回密码 / 同步摘录 | *.supabase.co | 你注册了账号并使用了云同步。纯本地使用不会产生这类请求 |
| 浏览本站页面 | grayhole.tech | 你访问官网。本站不加载任何第三方资源 |
八、第三方服务
| 服务 | 用途 | 接触到的数据 |
|---|---|---|
| Supabase | 账号认证与云同步数据库托管 | 仅在云同步启用时:邮箱、密码哈希、用户 ID、摘录镜像。数据库区域为美国西部(俄勒冈) |
| Cloudflare | 承载 grayhole.tech 静态站点 | 访问本站时的常规请求日志(IP、User-Agent) |
| 邮件发送服务 | 发送账号验证与密码重置邮件 | 你的邮箱地址,以及邮件投递所需的元数据 |
这三者都是按需处理的服务提供商,不因我们的业务获得对你的数据的使用权。
九、数据保留与删除
- 本地数据由你完全控制。在收藏库设置里可以清空,卸载扩展并清除站点数据也会一并删除。我们碰不到这部分。
- 云端镜像在你主动删除摘录后,以软删除标记传播到其他设备。永久删除需要在你本地再确认一次。
- 账号可以在账户页退出登录,也可以随时写信要求删除账号。收到请求后我们会在 30 天内删除你的账号记录及全部云端摘录,并回复确认。
- 备份:导出功能随时可用,包含回收站记录与本地图片字节。我们不会用「导出墙」来挽留你。
十、安全措施
- 云端所有表都启用了行级安全(Row Level Security),策略为
user_id = auth.uid()。隔离在数据库层强制执行,不依赖应用代码是否写对。 - 进入扩展与站点的只有 anon 公开密钥——它只能触达登录用户自己的数据行。绕过 RLS 的
service_role密钥从不进入任何前端代码。 - 扩展端的登录凭证存在
chrome.storage.local,且内容脚本被限制为无法读取;站点的登录凭证存在该站点的localStorage,所以本站刻意不引入任何第三方脚本——否则等于把令牌交出去。 - 所有通信走 HTTPS。密码在传输前由浏览器加密通道保护,在服务端以不可逆方式派生后存储。
需要说明的是:我们无法承诺绝对安全。任何系统都可能被攻破。我们能做到的是把攻击面压到最小——没有多余的数据、没有多余的依赖、没有多余的权限。
十一、未成年人
Gray Hole 不面向 13 岁以下儿童,也不会主动收集儿童的个人信息。如果你是家长或监护人,发现孩子未经你同意注册了账号,请写信给我们,我们会删除该账号及其数据。
十二、政策变更
本政策如有实质性变更,我们会更新页面顶部的生效日期,并在站点首页公告至少 14 天。涉及数据收集范围扩大的变更,会在生效前通过账号邮箱另行通知。
十三、联系我们
隐私相关问题、数据访问与删除请求:privacy@grayhole.tech
一般支持与故障反馈:support@grayhole.tech
本政策的姊妹文档是 服务条款。想深入了解技术实现,可参阅仓库中的源码——所有数据流都可以逐行对照。