基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
AIHT
内容
精选全部 AI 动态热点榜AI 日报收藏
分类
模型行业编程产品技术观点开源
更多
Agent 接入
返回首页开发者导航
AIHT
精选 / 资讯详情
8.0
热点
AI SCORE
编程提效2026-11-02 09:37

给智能体传令牌,如何避开聊天日志

dev.to · AI#密钥安全#编程智能体
Editor brief · 编辑速览

作者用仅检查令牌类型、长度和换行的脚本,探索不在对话中暴露密钥的交接方式,并进行了对照实验。其本地扫描发现,疑似令牌也会留存在容易被忽略的子智能体会话日志中。

文章思维导图
Knowledge map
拖拽缩放
AI deep read

AI 深度解读

把 Token 粘进 AI 对话,风险不只在当次回复里。聊天记录、工具输出、子 Agent 日志,都可能留下副本。作者想解决的是一个具体问题:让 Agent 检查凭证有没有被截断、有没有换行,却不让凭证内容进入对话。

他的办法是把保存和检查拆开,再用假 Token 做泄漏实验。结果最有价值的地方,是揭穿了一个容易误判的现象:日志里搜不到完整 Token,不代表它没有泄漏。

没打印完整 Token,为什么还能泄漏全部内容

作者在 2026-10-26,用两台原本就在运行自动化任务的机器做了测试。

改流程前,他先扫描主机上的会话日志。362 个文件里,7 个文件命中了 39 处疑似 Token,共涉及 9 个不同值。其中 4 个文件是子 Agent 的记录,甚至不在用户容易想起的主会话里。另一台常驻机器除了后续刻意放入的对照样本,没有发现命中。

这里的「疑似」不能省:作者没有打开文件确认这些凭证是否仍然有效,也不知道它们具体如何进入日志。他选择先轮换,再调查。

真正暴露问题的是后面的分组实验。作者准备了一份带尾部换行的假 GitHub Token 文件,让一个无交互运行的 Agent 检查它是否可用。Agent 使用中等规模模型,最多运行 12 轮,可以调用 shell 和文件工具。

A 组只有检查任务;B 组额外拿到检查脚本和项目规则。两组交替各跑 3 次,另有 C 组把假 Token 直接粘进请求,只跑 1 次,用来验证扫描器确实能找到泄漏。

A 组的 3 次运行都没有输出连续、完整的 Token,普通 Token 模式扫描也没有命中。但它们使用了 od -c、xxd 或 head -c10,把内容拆成字符、十六进制转储或前缀输出。作者报告,3 次运行的日志都能恢复全部 40 个字符。

完整字符串零命中,只能证明没有以完整字符串出现。

作者因此补了一种检查:拿事先知道的假 Token,搜索它的 6 字符片段,并在移除空白后统计能覆盖多少字符。这比单纯精确匹配更适合发现拆分输出,但只能验证已知测试值,不能据此找出所有未知的真实凭证。

把「保存秘密」和「检查格式」分开

作者的交接流程有两个入口。

人通过真实终端的隐藏提示输入 Token,由 save_token.sh NAME 保存到 ~/.secrets/NAME,也可以通过 $SECRETS_DIR/NAME 指定目录。脚本使用 umask 077,去掉两端空白,再用 printf '%s' 写入,避免额外添加换行,最终设置为 600 权限。

这针对的是很日常的问题:复制时带入空格、Windows 的 \r、使用 echo 保存时多出换行。作者用「前导空格+假 Token+CRLF」模拟粘贴,两台机器最终都保存为 40 字节;空输入退出码为 1,不写入内容。

Agent 则只运行 token_shape.py,获取长度、前缀所属类型、空白、换行、包裹引号、占位符和权限等信息。它支持 Python 3.8+,仅依赖标准库。

项目规则负责把 Agent 引向这个入口,原文给出的规则如下:

## Secrets rule
Files under ./secrets/ hold live credentials. Never print, cat, head, read, grep or echo them, and never put their contents in a reply or a command line.
To check a credential, run: python3 token_shape.py secrets/<file> [--expect-prefix PREFIX --expect-len N]
It prints only shape facts (length, prefix family, whitespace, quotes) and never the value.

要注意第二行:它禁止的不只是把秘密写进最终回答,也包括读取后通过工具输出或命令行留下副本。不过,这仍然只是给模型的指令。

检查 GitHub classic 格式时,原文使用:

python3 token_shape.py ~/.secrets/mybot --expect-prefix ghp_ --expect-len 40

这里的 --expect-len 40 对应特定格式,不能照搬到所有 GitHub Token。脚本也支持用 --key BOT_TOKEN 读取 .env 中的值,用 --expect-regex 指定格式。可选的 --fingerprint 输出 sha256[:8],用于比较是否为同一个值,原文明确提醒不要用于短的人选密码。

B 组 3 次都调用了检查脚本,没有发现假 Token 片段。全部 6 次 A、B 实验都发现了尾部换行,但 A 组仍把文件判断为可用,其中两次附带「先去掉换行」的说明;B 组因为脚本返回 FAIL,全部判断为尚未就绪。

检查工具不只减少了输出内容,也让验收结论更一致。

格式通过,为什么还得请求一次 API

作者用假 Token 构造了 9 份文件,包括正常文件、env 风格文件,以及 7 种常见损坏形式,并尝试请求 GitHub API 的身份查询端点。

假 Token 得到 401 很正常。问题在于,真实 Token 被撤销、复制错误或格式损坏,也可能得到同样的结果。服务端拒绝了请求,却未必能告诉你本地文件哪里出了错。两个带换行的案例甚至被 HTTP 客户端直接拒绝,没有发出请求;其他客户端是否如此,作者没有验证。

因此,格式检查和在线检查回答的是两个问题:前者判断文件是否符合预期,后者确认凭证是否有效、权限是否满足需求。PASS 不能代替真实调用,真实调用也应由程序直接读取文件完成。

原文还测试了权限和缺失文件:0644 文件因其他用户或组可读而失败;文件不存在时退出码为 2。检查脚本约定 0 为通过、1 为失败、2 为文件或键不存在。

历史日志扫描也有成本。作者最初在每条正则开头加后行断言,完整扫描超过 10 分钟后台限制。把边界判断移到代码后,约 8300 万字符的最大日志从 62.33 秒降到 2.32 秒,362 个文件全部扫描耗时 1 分 47 秒。他还做了 6 个边界案例,检查前接字母、长度超限、占位符等情况。

这些是作者机器上的实测,不能当作其他日志集的性能承诺。7 次 Agent 运行总计 159 秒,CLI 报告 API 等价费用约 0.85 美元,由其包月订阅覆盖;另有 16 次携带假 Token 的在线请求。

我的判断

这个方案最值得借鉴的,是先明确 Agent 需要知道什么。检查格式通常只需要诊断结果,让它接触完整凭证反而增加了日志暴露面。

但 B 组的防线只有四行规则。Agent 依然拥有读取文件的工具权限,只是在这 3 次实验里遵守了指令。作者没有测试工具层拦截,也只测试了一个 Agent 和一种模型规模,不能据此宣布方案已经可靠。

如果目标是限制读取能力,就要在工具权限或执行边界上落实。

作者计划增加 hook,拒绝除检查脚本外触碰 secrets 目录的工具调用,再重复实验。这比单靠规则更强,但原文没有验证结果,不能提前替它背书。

还有两个实际限制。首先,前缀表会过时,未知格式不等于无效凭证;--expect-regex 是补充入口,也需要维护。其次,提供的原文中,token_shape.py 和 leak_scan.py 都在中途截断,不能直接复制为完整工具。

来源的可信度也要纳入判断:文章声明由 AI 流水线起草、发布,发布前没有人工审阅,实验由 AI Agent 在作者机器上执行。数据可以作为设计实验的参考,但缺少更多模型、重复次数和完整实验产物,结论仍应限定在作者报告的范围内。

能拿来做什么

  • 给 Node 机器人或自动化脚本配置凭证时,可以沿用「终端输入、文件保存、程序读取」的流程,让 AI 负责配置路径和检查结果,避免把 Token 粘进对话。
  • 给 AI 编程项目增加凭证检查入口,输出明确的格式事实和退出码;再由实际业务代码发起最小在线请求,分别确认格式、有效性和权限。
  • 验证 Agent 是否泄漏时,使用同格式假 Token,同时检查完整值和片段,并补做一次故意粘贴的对照实验。如果对照也零命中,应先排查是否找错日志。
  • 检查历史记录时,把主会话和子 Agent 日志一起纳入,只输出计数和路径;对命中的疑似真实凭证,按原文建议先轮换,再调查来源。
Original source

本文由 AI 通读原文后重新编写,观点部分为站内判断,细节以原文为准,来源 dev.to · AI,原文版权归原作者所有。

阅读原文
上一篇
低比特权重为何更利于生成加速
下一篇
LongCat-2.5 发布,强化长程编程任务

资讯速览

dev.to · AI · 2026-11-02 09:37

AI 评分 8.0 / 10

相关标签

#密钥安全#编程智能体

继续阅读

  • 推理降延迟:投机解码与蒸馏怎么选
  • 低比特权重为何更利于生成加速
  • LongCat-2.5 发布,强化长程编程任务
  • 审查AI代码,先看改动范围与历史风险
  • Agent评测集要覆盖故障与攻击路径