Skip to main content
Jenks Guo

文档 / explanation

安全与隐私

公共和管理员接口能做什么,SSO、代理服务令牌、审计日志和 GitHub 访问如何保护它们,以及访客数据会如何处理。

两种访问方式

Public(公共) — 任何人,无需凭证。REST API(/api/v1/*)、公共 MCP 服务器(/mcp)、CLI 的公共命令和静态文件都是只读。它们只暴露按设计即为公开的发布语料库。ask_jenks 和网站聊天会调用语言模型,因此按 IP 地址限流以防滥用。

Admin(管理员) — Jenks,以及他授予令牌的 AI 代理。/api/admin/*、/mcp/admin、jenks admin … 和控制台可以校验、写入和删除内容文件,上传和删除媒体文件,并将 dev 提升到 main。这是真正的权限,因此有三层防护。

面向人的登录:SSO

控制台位于 https://admin.jenksguo.xyz/admin(开发站点为 https://admin.dev.jenksguo.xyz/admin)。Cloudflare Access 位于这些主机之前:在使用允许的 Google 账号登录前,任何人都无法访问控制台。其他地址上的 /admin 会重定向到那里。

Worker 不会盲目信任 Cloudflare 的请求头。每个管理员请求都会自检签名的 Access 令牌——用 Access 团队的公钥校验签名、应用的受众标签、签发者与过期时间——且邮箱必须在管理员名单中。

面向代理的服务令牌

AI 代理不会使用 Jenks 的登录。Jenks 会在控制台为每个代理创建一个服务令牌(Access → New agent token):

  • 具名 — "Claude Code on MacBook",这样审计日志能显示是哪一个代理做了什么。
  • 限定范围 — content(内容、翻译与站点文案)、media(媒体库)、publish(直接写入生产并将 dev → main)。每个令牌都可读。没有 publish 时,代理保存到 dev,由 Jenks 来提升变更。
  • 可过期 — 30 至 365 天(默认 90)。
  • 可撤销 — 一键生效于下一次请求。
  • 绑定 SSO — 只有通过 Access 登录的人才能创建、列出或撤销令牌;代理令牌不能创建其他令牌。若创建者不再是管理员,令牌也会失效。
  • 哈希存储 — 令牌仅在创建时展示一次;数据库只保存其 SHA-256 哈希。

代理将令牌作为 Authorization: Bearer jgx_agt_… 发送到 https://jenksguo.pages.dev 上的 /api/admin/* 或 /mcp/admin(Access 会阻止程序访问管理员主机)。浏览器不会自行发送此类请求头,因此恶意页面无法借用它。

审计日志

每一次管理员写入——以及每一次被拒的尝试——都会被记录:是谁(邮箱或 agent:<name>)、哪个工具、哪些文件、分支、主机,以及结果或错误。令牌的创建与撤销也会记录。文件内容从不记录。Jenks 在控制台(Access)中查看日志;代理只能读取自己的记录(admin_audit_log)。Git 历史仍然是内容本身变更的记录。

应急管理员令牌

原始管理员令牌仍可在紧急情况下使用,但它不能创建代理令牌。它保存在 macOS 钥匙串中名为 agent-env:JENKSGUO_ADMIN_TOKEN,并作为加密的 Worker 机密保存,且以恒定时间比较。若它可能泄露,请轮换:在钥匙串与 Worker 机密中存入新值,旧值会立即失效。仅用于本地开发(localhost 上的 wrangler dev)时,控制台可用它登录:令牌会被一次性交换为 HttpOnly 会话 Cookie。

管理员 API 的可触达范围

写入被限制在内容路径的允许列表——语料条目、lenses、skills、核心文档、翻译术语表与本文档。它不能更改代码、工作流、机密或 content/ 之外的任何内容。每次写入都会先按内容 schema 校验。

媒体文件

通过管理员界面上传的图像、视频和 PDF 存储在 Cloudflare R2 存储桶中,并从 /media/… 提供。它们从上传那一刻起就通过地址公开可访问,因此只应放置面向所有访客的素材。

  • 文件类型由字节内容而非名称检测,仅接受 Web 图像、视频与 PDF 格式(每个 25 MB)。
  • 若 SVG 图像包含脚本或事件处理器将被拒绝,且所有 SVG 都在内容安全沙箱中提供,因此即便直接打开的构造型 SVG 也无法在本站运行代码。
  • 与内容不同,媒体不在 git 中:删除是永久性的。若已发布内容仍在使用该文件,则拒绝删除。

GitHub 访问

管理员写入会通过 GitHub API 转化为提交,使用仅限单一仓库、仅授予发布所需权限的细粒度个人访问令牌。它作为加密的 Worker 机密保存。因为每次变更都是一次提交:

  • git 历史记录每一次变更 — 变更了什么、何时、为何(提交信息;提交尾注中包含代理名),
  • 始终可撤销 — 可以还原任何文件的任意早期版本。

有风险的变更可先在 dev 分支上分阶段部署,并在 https://dev.jenksguo.xyz 上检查后再上线。

访客隐私

  • 无广告跟踪器,无营销 Cookie。
  • 聊天记录仅保存在访客浏览器(sessionStorage)中,并在标签页关闭时清除。本站不存储聊天记录。
  • 聊天消息通过 Cloudflare Worker 发送到 OpenRouter,后者将其路由到第三方语言模型。会提示访客不要分享敏感的个人信息。
  • 语音在访客点击麦克风前处于关闭状态,且在十轮对话后或未检测到真实对话时自动关闭。语音输入在可用时使用浏览器自带的语音识别;否则音频会发送到 OpenRouter 进行转写。口语回复由 Cloudflare Workers AI(Deepgram Aura-2,英语)或 OpenRouter(其他语言)生成,设备自带的语音合成作为后备。不存储任何录音或生成的音频。
  • Cloudflare 为安全与限流保留标准请求日志。

内容隐私

content/ 下的一切都是公开的。Jenks 的简历曾包含电话号码、家庭住址与推荐人联系方式;这些均未纳入语料库,且绝不能加入。关于他人的事实仅限于描述 Jenks 角色所必需的内容。

问题反馈

请发送邮件至 jenksguo@gmail.com 并附上细节。未经许可请勿测试管理员接口。

.md本页内容在 AI 协助下翻译;官方职位名称保留英文。