把订阅链接发给别人,等于把账号里的流量交了出去,对方用的时候,你这边多半收不到任何提示。
这句话有源码可查。开源面板 Xboard 里负责验证订阅请求的那个中间件我读过,前后只做两件事,从网址里取出 token,拿它到用户表里找人。找到了就放行。中间没有输密码的环节,没有验证码,请求来自哪台设备、哪个 IP,它一概不看。本站收录的 28 家机场各自用什么面板,我没有逐家确认过,下文说到源码都是指 Xboard,别的面板大体同理,细节会有出入。
token 是一段 32 位的随机串,网址只是它的包装
Xboard 生成 token 的办法是取 16 个随机字节,拼上当前时间,再算一次 MD5,得到 32 位的十六进制字符。订阅地址默认是域名后面跟 /s/ 再跟这段 token,其中的 s 管理员可以改成别的路径。中间件取 token 时先看网址参数里有没有 token=,没有再去路径里找,所以老式的 ?token= 写法同样有效。
前面的域名反倒不固定。源码里管理员可以填一串订阅域名,生成链接的时候随机取一个。同一个账号今天复制到的域名和上个月的不一样,多半是机场换了订阅域名,后面那段 token 没变,账号就还是那个账号。
拿到链接的人能做什么,做不了什么
他能随时下载你的完整节点列表,机场加了新节点,他那边更新一下也会有。他用掉的每一个 GB 都记在你的账上。他还看得到你的套餐状态,订阅回应里有一行响应头写着已用流量、总流量和到期时间,客户端会直接显示出来。Xboard 另有一个开关,机场打开以后,节点列表最前面会多出几行写着剩余流量、距离重置还有几天、套餐哪天到期的假节点,持有链接的人同样看得到。这几行的来历在节点名称怎么看里讲过。
他做不了的事是登录网站。登录要邮箱和密码,订阅内容里装的是节点和分流规则,没有这两样。所以他改不了你的密码,也没法替你重置订阅,主动权还在你手里。
节点列表里每个节点都带着一份凭据,Xboard 里除了 Shadowsocks 以外的协议,这份凭据就是账号的 UUID,各个节点共用同一个。别人只要成功下载过一次列表,节点信息就存在他本地了,链接后来失不失效,都不妨碍他继续连。这是重置订阅必须换两样东西的原因,后面细说。
链接的副本,会留在这几类人手里
OWASP 有一页文档专门讲网址里带敏感信息的毛病,列出的泄露位置有 Referer 请求头、服务器日志、几个人合用的电脑、浏览器的历史记录与缓存,外加旁人从背后瞄到屏幕。文档特别强调,单靠 HTTPS 解决不了。HTTPS 只管传输途中不被偷看,上面这些位置留下的是整条网址。对照着看机场的订阅链接,副本主要落在五类人手里。
订阅转换站的运营者。客户端读不了机场给的格式时,很多人会搜一个网页版的订阅转换。这类网站大多基于开源项目 subconverter,它的中文 README 里,调用格式是 /sub?target=…&url=…,其中 url 一项的说明就是机场提供的订阅链接,要先做 URLEncode 再填进去。整条链接作为参数发到了对方的服务器上,对方想留就能留。我的建议是先别急着找转换站。Xboard 这类面板会按客户端类型自动换输出格式,这一点在机场是什么里讲过,多数时候把原始链接直接贴进客户端就行。真要转换,subconverter 是开源的,可以在自己电脑上跑。
看过你截图的人。完整网址会出现在好几个地方,客户端里管理订阅的那一页,订阅更新不成功时弹出的错误提示,还有浏览器的地址栏。在几百人的群里发一张求助截图,等于人手一份。发之前把 token 那一整串盖住。
拿到你配置文件的人。mihomo 文档里,订阅下载回来会存成本地文件,位置由 path 字段定,不写的话文件名默认取订阅网址的 MD5。文件里是全部节点的地址和你的凭据。有人排错时图省事,把配置文件夹整个压缩了发给热心网友,节点也就跟着送了出去。
测速机器人的运营者。本站评测里的测速图是用 Telegram 上的 MiaoKo 测速机器人跑的。它的指令文档写得清楚,测试时要么在指令后面直接跟订阅链接,要么先把订阅存在机器人那边,以后按名称调用。哪种用法,链接都到了机器人的后端。这类工具很好用,测完顺手重置一次订阅就是了。
和你共用电脑或浏览器的人。在浏览器里打开过订阅链接,它就进了历史记录,开了同步的话还会跟着账号跑到别的设备上。在别人的电脑上临时导入过订阅,走之前记得删。
被人蹭用,从哪里看得出来
能看的只有流量。Clash Verge Rev 这类客户端的订阅卡片上有已用流量,面板是 Xboard 的话,用户接口里还有一份当月的流量记录,按天列着用量。办法很土,心里大概有个数,平时一天用多少。哪天人在外面几乎没上网,记录里却多出好几个 GB,就该起疑了。流量是怎么累计、怎么乘倍率的,见流量倍率和重置日。
别指望系统替你报警。Xboard 的套餐表里有设备数限制这一栏,开不开由机场定。本站资料里,微风网络、飞为和灵动云自述不限设备,在这样的机场,多一台陌生设备连进来不会触发任何东西。
重置订阅,面板同时换掉 token 和 UUID
Xboard 处理重置的函数叫 resetSecurity,里面就三行要紧的,给账号生成新的 UUID,生成新的 token,把新的订阅地址返回给你。换 token 是让旧链接作废,换 UUID 是让已经被人下载走的旧节点作废。只换前一样,对方手里存着的节点还能接着用。
同一个文件里改密码的函数我也看了,它只动密码,顺手把其他地方的网站登录踢下线,token 和 UUID 都不碰。所以发现链接泄露以后去改登录密码,没有用。
真要处理,顺序是这样的。登录机场网站,在用户中心找重置订阅,各家面板上的叫法不太一样,找不到就发工单让客服操作。重置完,你自己的设备也会全部掉线,因为它们存的也是旧 UUID。手机、电脑、路由器挨个处理,先删原来那条订阅,再把新链接贴进去。光点更新没用,客户端发请求用的还是作废的旧地址。要是发出去的截图里还露了登录邮箱,把密码也改掉。过一两天再回去看一眼流量记录,确认没有继续乱涨。
重置之后新订阅要是也拉不下来,那是另一类问题,按订阅更新失败那篇逐项查。
常见问题
只改登录密码,泄露的订阅链接会失效吗
不会。Xboard 源码里改密码的函数只动密码,顺带把别处的网站登录踢下线,订阅 token 和节点 UUID 原样不变,旧链接照常能用。要让旧链接失效,得用用户中心里的重置订阅。反过来,重置订阅也不会改你的登录密码,这是两套东西。
重置订阅以后,为什么自己的设备全都连不上了
因为重置换掉的不只是链接。Xboard 的重置函数同时生成新的 token 和新的 UUID,UUID 是你连每个节点时用的凭据,旧的一作废,手机、电脑、路由器里存着的旧节点就全部失效。解决办法是逐台设备删除原来那条订阅,再粘贴新链接导入。
机场订阅链接的域名变了,正常吗
多数情况下正常。Xboard 允许管理员填多个订阅域名,生成链接时随机取一个,所以同一个账号前后看到的域名可能不同。要核对的是两点,新链接是你自己从用户中心复制的,后面那段 32 位 token 没有变。来路不明的人发来的新订阅地址不要导入。
只把一个节点的分享链接发给朋友,有风险吗
有。vless、trojan 这类分享链接,@ 符号前面那一段就是你的凭据。在 Xboard 里,除了 Shadowsocks 以外的协议,各个节点用的凭据都是账号的同一个 UUID。对方拿到一个节点,等于拿到了你在这家机场所有节点上的身份,流量记在你头上。
求助时要发订阅相关的截图,该遮哪里
网址里 /s/ 后面,或者 token= 后面的那一整串都要盖住,只遮一半不保险。客户端更新失败的报错里常带着完整网址,订阅管理页和浏览器地址栏也一样。截图里要是还露出了登录邮箱,一并遮掉。
参考来源
- Xboard 源码 Client.php 中间件,订阅请求的验证过程
- Xboard 源码 Helper.php,token 的生成与订阅地址的拼接
- Xboard 源码 UserController.php,resetSecurity 与 changePassword
- Xboard 源码 Server.php,节点凭据由账号 UUID 生成
- Xboard 源码 ClientController.php,节点列表前的套餐信息行
- Xboard 源码 StatController.php,用户的当月流量记录
- OWASP 社区文档,网址中的敏感信息会暴露在哪些地方
- subconverter 中文 README 的调用说明
- mihomo 官方文档 proxy-providers 一节
- MiaoKo 测速机器人的指令文档
更新记录
- 首次发布