检查教程示例有没有真实密钥,本质是核对“官方用来讲字段形状的值”和“可被拿去登录、解密、拉取集合的值”是否被写成了同一串字符。YAML 会把标量原样载入,注释不会抵消一个已写出的口令。手册在全局配置和代理集合里列出了所有会承载密钥的键。适用条件:你要审阅即将发布或已经复制来的示例,并且只根据字段与字面值判断,不依赖任何未记载的扫描工具名称。
列出会存放密钥的键再逐项看值
全局配置中应检查:authentication(user:pass 列表)、secret(API 访问密钥)、tls.certificate / tls.private-key / tls.ech-key(证书、私钥、ECH 密钥,可为 PEM 或路径)。代理集合中应检查:url(http 类型的集合地址)、header(如 Authorization)、age-secret-key(用于解密 age armor 配置)、payload 内的 password 以及可能出现的证书相关覆写。判断依据:这些键的值一旦能在真实环境完成认证或解密,就不能出现在教程示例里。
具体操作:按键名搜索,不要按“看起来像不像密码”的主观长度先删后查。空的 secret: "" 与说明性的 user1:pass1 属于文档展示;非空、无法从手册对上的高熵字符串则视为风险。路径若指向本机证书文件,等同于泄露私钥位置,示例应改成键名加占位说明。
用手册中的说明性字面值做对照表
下列写法在来源中作为说明出现,审阅时应视为“允许留在教程里的非真实示例”:authentication 的 user1:pass1、user2:pass2;secret 的空字符串;代理集合 url 的 http://test.com;payload 的 password: "password" 与 server: server;header 的 token 1231231。健康检查地址如 https://www.gstatic.com/generate_204、https://cp.cloudflare.com 用于探测,不是密钥,但也不应被改成带私人令牌的完整链接。若必须演示查询参数,只写 token=示例 片段。
判断依据:值与上表同类(短单词、递增用户名、空密钥、文档域名)则通过这一项;值是独立生成的口令、PEM 块、age 密钥正文、或带可访问主机的完整下载地址,则判定为真实或等价于真实,必须替换后再发布。YAML 的引用(锚点与别名)若指向上述键,也要跟着检查,避免只改一处、另一处仍保留原值。
secret: "" # 空字符串:文档式占位,仍须确认未被改成真密钥
authentication:
- "user1:pass1" # 文档式用户,若变成无法对上手册的组合则不通过
检查失败时如何处理,避免把密钥写进修正稿
若对照后发现某键不像说明性数据,下一步不是改几个字符做“脱敏”,而是:把该值改为空、改为手册已有的示例单词,或删除该键并在 # 注释中写明读者应填的数据类型。证书类只保留 certificate、private-key 键和 string 说明,不保留 PEM 正文。age-secret-key 若出现完整密钥形态,应从示例中拿掉,改用字段名加文字说明:核心可用命令行参数或环境变量加载,教程不必贴密钥。url 若不是 http://test.com 这类来源中的说明地址,视为可能的真实集合,应改回说明地址并提醒读者自行填写。
形态仍要合法:替换后保持缩进与引号,以免审阅者无法加载。可用 log-level: error 在控制台或控制页面确认示例不会因缺键而无法解析,但不要为了“跑通”去填任何真实口令。最终通过标准是:所有密钥类键都能在官方说明性字面值表中找到对应,或值为空并由注释声明用途。
资料:https://yaml.org/spec/1.2.2/
https://wiki.metacubex.one/config/general/
https://wiki.metacubex.one/config/proxy-providers/