安全模型
Passerelle 的设计使得长期凭证既无法到达浏览器,也不会出现在 URL 中。每一项加固都在源码中就地记录
与秘密绑定的握手
每个守护进程使用每机器独有的秘密注册。用不同秘密声称同一 machineId 的重新注册会被拒绝,因此在重连窗口内,已知的机器 ID 无法被劫持。
令牌永不离开服务器
长期会话令牌仅存于网关上一个经 httpOnly、AES-256-GCM 加密的 cookie(__Host-passerelle_sessions)中。浏览器从不接收它,因此仪表盘上的 XSS 无法窃取它。
一次性交接码
打开服务时不会带着令牌重定向。网关通过可信 WebSocket 向守护进程推送一个一次性交接码,然后仅以 ?code=<code> 重定向浏览器。守护进程将该代码一次性兑换为 httpOnly cookie。因此令牌永远不会出现在历史记录、Referer 或访问日志中。
PIN 轮换
用于验证机器的 PIN 在使用后立即失效,包括在 headless(PM2)模式下。
SSRF 防护
代理在转发前拒绝私网与链路本地目标地址,阻断将隧道用作内部 SSRF 探测的尝试。
速率限制
PIN 验证、代理与公开端点各自带有按 IP 的限流,以削弱暴力破解与滥用。
纵深防御
- 守护进程以最低权限在 PM2 下运行。
- 网关容器丢弃所有 Linux capabilities 并禁止提权。
- 版本策略端点让网关能向过时的守护进程与 PWA 发出警告。