# 安全说明 ## 适用范围 本插件为可信管理员提供远程接入,不提供多租户隔离、目录 ACL 或应用角色权限。所有获准用户共享 Harness 的数据、工具和主机权限,可能读取文件、调用模型凭据或执行命令。Cloudflare 配置页只在本机开放,但不能据此将远程用户视为低权限用户。 如需向不可信用户开放服务,应使用独立、受限的运行环境。本插件无法隔离已被攻陷的主机、浏览器、Cloudflare 账号或 Harness 插件。 ## 请求与身份校验 Harness 和插件网关仅监听 loopback,由 cloudflared 建立出站连接。网关验证 Access JWT 的签名、issuer、audience、有效期、凭据年龄和身份字段,并核对允许邮箱;不只信任客户端提交的邮箱头。 网关检查请求 Host;修改请求和 WebSocket 升级还必须携带匹配的 HTTPS Origin。客户端 Cookie、Authorization 和身份头不会透传到 Harness,原生启动 Token 和上游 Set-Cookie 不会返回远程浏览器。插件管理接口不经远程入口开放。 设备合规由 Cloudflare Access 执行。配置设备检查后,邮箱、登录方式和设备条件共同生效;仅配置邮箱白名单不构成可信设备验证。 ## 会话与撤权 长连接受 JWT 有效期、凭据年龄上限和默认 90 秒浏览器租约约束。租约绑定完整 JWT 的指纹,新的凭据不会为旧连接续期;浏览器通过官方 Connection 重建连接。 Cloudflare 策略变更和账号撤权存在传播时间,插件不保证即时全局撤权。浏览器后台限速或网络切换可能导致连接关闭。客户端会检查状态并重连,但不自动重放任务、审批或模型请求。 静默认证使用同源、受 Access 保护的回调,校验窗口来源和一次性随机值。交互登录在独立窗口完成,回调通知本身不授予权限,客户端仍须重新通过网关校验。浏览器限制嵌入认证或登录会话到期时,需要用户重新登录。 带版本的脚本和样式只允许浏览器私有缓存,兼容适配脚本按内容校验。HTML、认证响应、任务数据和流式响应使用 `no-store`,不启用共享 CDN 缓存。 ## 凭据与本机文件 - Cloudflare API 管理 Token 仅保存在内存中,用于配置操作;配置检查失效或操作结束后释放。 - Tunnel Token 交由 DSH 凭据服务保存。静态加密能力取决于所用凭据 provider。 - cloudflared 使用权限为 `0600` 的临时 Token 文件,不将 Token 放在命令行参数中;连接器退出时清理文件。 - 状态文件权限为 `0600`,新建状态目录为 `0700`,使用原子替换和实例锁。使用已有目录时,请自行确认目录权限。状态包含域名、允许邮箱和云端资源 ID,应作为私有配置管理。 不要公开状态目录、运行日志、浏览器存储或部署备份。实例锁失效时入口会停止;不要为启动另一实例而手工删除使用中的锁。 ## 云端资源 插件先创建并回读访问策略,再发布 Tunnel 和 DNS。资源归属由本机安装标识和保存的资源 ID 确认。请求超时不代表创建失败,再次配置时会先核对已有资源。 插件不持续同步 Cloudflare 控制台中的人工修改。发现冲突或策略不一致时停止配置,不覆盖其他部署。清理按 DNS、Tunnel、Access 应用的顺序执行,保留账号共享的登录方式。删除状态文件可能导致后续无法自动确认资源归属。 ## 报告问题 请勿在公开 Issue 或 PR 中提交凭据、私人域名、会话内容或可直接利用的漏洞细节。如果仓库已启用 GitHub 私密漏洞报告,请使用 **Security → Report a vulnerability**;否则先提交不含敏感细节的 Issue,联系维护者确认私下沟通方式。 报告应说明插件与 DSH 版本、受影响功能、预期行为和脱敏复现步骤。已泄露的凭据应立即撤销或轮换。修改 Git 历史不能撤回其他人的克隆、Fork 或平台缓存。