Claude Code 跑 Max 20x 漏洞分析:Key 用 TaoToken
2026/9/17 13:22:30 网站建设 项目流程

群里那条记录传得飞快:Claude Code Web 端挂油猴脚本,登录就能拿 Max 20x 订阅。TaoToken 是我的通道选择,去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 建个 Key,就能让 Claude Code 以长会话 Agent 的方式逐段读这段脚本,把 fetch 接管、checkout_capabilities 替换和支付状态机提前发权这几处核对清楚。

真正让人头疼的不是脚本本身有多长,而是它牵扯的东西太散:浏览器里被劫持的 fetch 和 XMLHttpRequest、被半路换掉的响应体、后端到底有没有重新校验账号资格、SEPA Debit 的 Mandate 是怎么走的、支付平台会给出哪些中间状态、失败通知迟到多久算迟到。这些信息分别躺在脚本片段、抓包记录、支付规则文档和状态机推演里,靠人一条条对着看,看到第三遍就开始怀疑自己第一遍看的是什么。长会话 Agent 的价值就在这儿:把四份材料摆在同一个上下文里,让它逐段回答「这一段对应哪条规则、这个字段被谁改过、这处结论还缺什么证据」。

1. 油猴脚本接管 fetch 之后,人工核对难在哪

1.1 被改的不是服务器,是响应走到浏览器之后的那一段

先把事实摆清楚:那段脚本没有碰 A 社的任何服务端资源。它在订阅页刚开始加载的很早阶段,就把浏览器原生的 fetch 和 XMLHttpRequest 拦了下来,真实请求照样发出去,服务端返回的也是真数据,只是响应回到浏览器之后被脚本中途截住,塞进了一句{ "checkout_flow": "cassia" }。为了不露馅,脚本连 HTTP 状态码、响应头、responseText 和 response 都一并伪装成 200 OK。

前端一看这个字段,就认为后端指定了 Cassandra 之外的那套备用结账路径,原本不会出现的付款入口被硬生生撬开。问题在于,这个checkout_capabilities本该只是「告诉前端显示什么」的 UI 配置,一旦后端在创建订单时不重新算一遍账号资格,它就等于变相成了授权凭证。人工核对的难点正在这里:脚本只有几十行,抓包也就几个请求,但要判断的却是「前端被改到哪一步」和「后端该在哪一步重新验证」两件事,前者看得见,后者看不见。

1.2 为什么要把脚本、抓包、状态机笔记塞进同一个会话

我习惯的做法是把材料按顺序编号:脚本里接管 fetch 的那段源码、订阅页的 HAR 抓包(只留 checkout 相关请求)、CWE-602 的官方描述、SEPA Direct Debit 的状态流转说明。四份东西单独看都不难,难的是它们之间那根线——脚本改的是哪个字段,这个字段在正常流程里由谁产生,支付平台在什么状态返回之后订阅系统才该动权益。

这些问题的答案分散在不同长度的上下文里,短对话问着问着,前面给的脚本片段就被挤出去了,Agent 会开始凭印象回答。长会话的好处是这四份材料能一直待在工作区里,你随时可以指着某一行问「这里如果后端重算,会拒绝在哪一步」。前提是模型通道别掉线、别串号,这也是为什么我把 Claude Code 的底座接到 TaoToken 上。

2. settings.json 里把 Claude Code 接到 TaoToken

2.1 建 Key 与模型 ID 的正确取法

第一步是拿到一把能用的 Key。打开 TaoToken 官网 注册并登录,进控制台创建一个 API Key,本文一律用YOUR_API_KEY指代你手里那把。模型 ID 别自己拼,也不要凭记忆写个带日期后缀的名字,直接到模型广场看当前列表,复制你要用的那一个。

这一步看着简单,但它是后面所有审查动作的地基:Claude Code 要长时间挂着脚本片段和抓包记录,通道不稳、Key 权限不对,会话断在半路,前面的分析上下文就白攒了。TaoToken 在这里承担的角色很单一,就是提供一条稳定可用的模型通道,别的判断都不归它管。

2.2 环境变量与 ~/.claude/settings.json 两种写法

最直接的是环境变量,写进 shell 配置文件也好,临时导出也好,三个变量就够了。注意 Base URL 末尾不要带/v1,这是最容易踩的一脚。

export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="YOUR_MODEL_ID"

如果你希望配置跟着项目走、不污染全局环境,就写进~/.claude/settings.json的 env 字段:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "YOUR_MODEL_ID" } }

两处地址要分清楚:给人点、用来注册和控制台的地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,填进 Claude Code 的 Base URL 只写https://taotoken.net/api。把带参数的落地页地址粘进配置文件,请求一定失败;反过来把接口地址当官网点,也进不了控制台。

3. 让 Agent 逐段拆 checkout_capabilities 到 Cassia 那条路

3.1 第一处疑点:UI 配置被当成了授权凭证

材料准备齐之后,先问第一个问题:这段脚本能做到的极限是什么?答案是可以百分之百确认它欺骗了前端去选择 Cassia 路径,仅此而已。它改不了服务端的任何数据,也伪造不出真实资金。所以真正要核的不是脚本,而是它撬开那道门之后,后端有没有重新收口。

如果后端在创建订单时会重新算一遍「这个账号属于哪个地区、这个套餐允许哪些支付方式、有没有资格走备用结账」,那么前端随便改都无所谓,这压根不算漏洞。反过来说,如果备用结账入口被前端强行打开之后,后端居然照单接收了这笔订单,那第一处问题就坐实了:一个只该影响界面显示的字段,被当成了通行证。这句话值得让 Agent 展开讲,因为它把「前端漏洞」和「后端信任边界错误」区分开了。

3.2 对照 CWE-602 列一张核对表

让 Claude Code 把检查点按「前端可见」和「服务端必须重算」两栏列出来,比让它写一段结论有用得多。下面这张表是我让它输出后手工精简的版本:

前端能看到的东西能否作为授权依据服务端应重新计算什么
checkout_capabilities 里的结账流程标识账号地区、套餐档位、可用支付方式
页面上是否渲染出 SEPA Debit该账号是否被允许进入备用结账
前端提交上来的订单参数订单金额、币种、订阅时长
支付平台返回的中间状态是否已拿到最终结算结果或失败通知

这张表对应的就是「永不信任客户端」那条老规矩:按钮可以隐藏,接口可以抓包,页面变量可以随便重写,前端的判断只负责让正常用户顺手,不负责安全。

3.3 一段不容易跑偏的提示词

长会话里最容易出的问题是 Agent 顺着你的语气往下编,你说「后端肯定没校验」,它就帮你补一段后端实现。所以提示词里要明确写死边界:

你是安全代码审查助手。下面给你三段材料: 1) 油猴脚本里接管 fetch / XMLHttpRequest 的那段源码; 2) 订阅页的 HAR 抓包,只保留 checkout 相关请求; 3) SEPA Direct Debit 的状态流转说明,以及 CWE-602 的定义。 请按顺序回答:脚本在哪个时机替换了哪个字段;哪些判断本应放在服务端重算; 在「发起扣款」和「资金最终确认」之间,权益如果提前发放会出现什么后果。 只做代码解释和规则对照,不要推断 A 社的内部实现; 凡是缺少直接证据的结论,一律标注「待订单记录与 webhook 日志确认」。

最后一句很关键。我们手里只有公开脚本、页面行为和支付机制说明,看不到 A 社后端源码,也看不到支付服务商的日志,所有关于「在哪一步发权」的说法都是推导,不是定论。

4. 随机 IBAN、SEPA Mandate 与发权时机三段核对

4.1 MOD 97 只证明这个字符串长得像 IBAN

这里有个常见误称要先纠正:IBAN 不是德国银行卡号,它是国际银行账户号码;SEPA Debit 也不是刷卡,而是商家拿着你签的授权(Mandate)去向银行发起账户扣款。随机 IBAN 网站生成的那串字符,通常只是满足了结构和校验位规则,比如德国 IBAN 里的国家代码、校验位、银行识别段和账户标识,能通过 MOD 97 之类的计算。

格式正确和账户真实存在是两件事。就像你写了一个符合校验规则的身份证号,它证明你算术做对了,证明不了世界上真有这个人,更证明不了这个人是你。IBAN 校验同样是这个道理:它证明不了账户是否存在、是否属于你、里面有没有钱。让 Agent 把这三条单独列出来,比让它泛泛说「校验不充分」清晰得多。

4.2 PROCESSING 就发权,窗口期从哪一刻开始

SEPA Direct Debit 不是同步支付。商家提交扣款后,系统可能先给出 created、submitted、processing 这类中间状态,真正扣款成功、被拒绝、被退回,要等到后面才发生。面向消费者的 SEPA Core Direct Debit 即使已经扣过一次,后面仍然保留退回和退款机制,Reject、Return、Refund 本来就是正常流程的一部分。

问题就出在订阅系统怎么理解这些状态。如果它把「扣款请求创建成功」当成「钱已经到账」,在 PROCESSING 阶段就把账号升级成 Max 20x,那么从发权到失败消息到达之间的这段时间,就是一个完整的攻击窗口。让 Claude Code 帮你画这条时间线——用户点支付、支付平台创建请求、订阅系统发权、银行返回失败、webhook 送达、权益撤销——每一段都能标上「此时钱在哪里」。

三段问题叠在一起才凑成这条链路:客户端信任边界错误、备用支付流程缺少服务端鉴权、异步支付状态机发权过早。任何一段单独拿出来都不致命,合起来就是一次暴击。

5. 会话跑起来之后,三种跑偏信号怎么处理

5.1 Agent 开始替 A 社补写后端实现

最常见的跑偏是它写着写着开始描述「Anthropic 的后端应该是这样处理的」,句子越来越具体,细节越来越像真的。发现这种情况,直接打断,把提示词里的边界再贴一次,要求它把所有推断句改写成疑问句加验证方式,比如从「后端没有校验地区」改成「需确认:创建订单接口是否重新读取账号地区字段,可用什么日志佐证」。

第二种跑偏是结论先行。你说「这就是 CWE-602」,它就顺着这个结论找证据。可以反过来问它:「如果要推翻这个结论,最需要看到哪份记录?」能把这个问题答清楚,说明前面的材料它真的读了。

5.2 401 与模型 ID 对不上时的两个检查点

配置层面的问题通常只有两类。一是返回 401,多半是 Key 复制时少了一段、带了空格,或者这把 Key 已经删了,回控制台重开一把最省时间;二是模型 ID 报不存在,这时候别怀疑网络,去模型广场核对你填的那个名字是不是列表里真实存在的条目,路径里的/v1有没有多写。

还有一个长会话特有的现象:聊到几十轮之后,Agent 突然忘了第一段脚本的细节,开始用「通常这类脚本会……」来兜。这不是它变笨了,是前面的材料被挤出了有效上下文。解决办法是把脚本关键片段重新贴一遍,或者干脆分成「脚本层」「支付层」两个会话,各自把材料喂足。

排查完这些,顺手回 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的用量页面看一眼这几轮长会话的消耗,心里有数,下次做同类审查时就知道该留多少预算了。

6. 复核完这条链路,下一步往哪走

这套流程跑通一次之后,你会发现真正花时间的不是配 Claude Code,而是把材料整理成 Agent 能用的形状:脚本得裁到关键那段,抓包得筛掉无关请求,支付规则得找到能直接引用的那份说明。整理一次,后面复盘同类前端信任边界问题时都能复用。

配好之后先别急着开长会话,用同一把 Key 在 模型对话 里发一条测试消息,确认模型 ID 和 Base URL 都没填错,再回到 Claude Code 里挂材料。如果你打算长期用这种方式做代码审查和链路复核,可以先看 Coding Plan 的档位够不够用;Key 都在 控制台 API Keys 里创建和管理,环境变量与 settings.json 的字段对照可以翻 Claude Code 接入文档,照着抄比对着报错猜要快得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询