核心问题MCPay 让 Agent 能付钱了,但谁来确保 Agent 付对了钱?Prompt Injection 可以操纵 Agent 执行恶意支付。签名是有效的,密钥没有泄露,但钱被转走了。现有的 Agent 支付项目都在解决"怎么付",没人管"该不该付"。思路我们没有沿着"检测恶意输入"的路走——因为攻击者总能绕过文本检测。我们换了个角度:验证支付意图本身是否合理。一笔支付涉及金额、收款方、任务上下文、历史行为。攻击者可以伪造文本,但很难同时让所有维度都对得上。5 层 PIV 框架PIV = Payment Intent Verification,支付意图验证。从上到下依次过滤:Layer 0 — 密码学边界:HMAC 签名标记数据来源。Agent 自己产生的请求和外部 API 返回的数据,信任权重不同。Layer 1 — 硬规则:限额、白名单、频率,确定性判断,链上合约强制执行,绕不过去。Layer 2 — 注入检测:正则匹配 5 种攻击模式(指令覆盖、Base64 编码、Unicode 混淆、社工话术、上下文异常),逐句拆分打分,精确定位哪句话有问题。可选接入 LLM 做语义分析。Layer 2.5 — 金丝雀令牌:在内部上下文埋一个隐藏标记,如果这个标记出现在后续请求中,说明有人在试图读取系统 prompt。Layer 3 — 语义一致性:交叉验证支付的各个字段——"查天气 API"但付 100 USDC?"买数据服务"但收款方从没见过?这些矛盾会被抓到。Layer 4 — 经济合理性:建立每个 Agent 的行为基线。平时花 $0.01 的 Agent 突然要花 $5,即使文本完全正常,价格偏离 500 倍也会触发告警。实际效果Demo 里有一个"隐形攻击"场景:task_context 是"购买高级数据分析包",文字完全正常,金额在限额内,正则检测和 LLM 都说没问题。但 Layer 3 发现金额跟"数据分析"的常见价格偏离了 10 倍,Layer 4 发现这个收款地址从未出现过、且金额是该 Agent 历史均值的 499 倍。结果:标记为可疑。做了什么MCP Server — 5 个工具:支付请求、创建会话、查余额、查审计、紧急暂停。直接扔进 Claude Code 就能用。链上合约 — 3 个 Solidity 合约部署在 Monad 测试网: AgentVault:非托管钱包,用户是 owner,Agent 只有受限的 Session Key SessionKeyManager:链上 7 步验证(有效期、单笔限额、总预算、白名单、策略检查) PolicyEngine:全局策略引擎Dashboard — 6 个页面。重点是攻防演练场:你可以直接在页面上输入一段 Prompt Injection,点分析,实时看 5 层检测结果和逐句打分。Demo — 8 个攻击场景,从最简单的"ignore instructions"到精心构造的隐形经济攻击。赛题覆盖非托管 → AgentVault 合约,用户是 owner Agent 无法碰私钥 → Session Key 模式 限额/白名单 → 硬规则 + 链上策略 紧急暂停 → 一键冻结,链上 + 内存双暂停 原生机器支付 → MPP + x402 双协议 审计 → 全字段记录,Dashboard 可视化 + CSV 导出 不同 Agent 不同权限 → high/medium/low 三档合约地址(Monad 测试网)PolicyEngine: 0x70bf4b8712869acd52d3426e50d0c15d6d54770c SessionKeyManager: 0xce60edcc895377bb7d566de53077a1160780dd16 AgentVault: 0x424365d22f4180781cf80ccd973b2a37270d6917技术栈TypeScript / Solidity 0.8.24 / MCP SDK / MPP + x402 / Anthropic Claude API / Hardhat 3 / viem / Express 5快速开始git clone https://github.com/Ephemeral6/agentfirewall cd agentfirewall && npm install --legacy-peer-deps npm run demo(运行 8 个攻击场景) npm run dashboard(启动 Dashboard → http://localhost:3000)前端演示地址:https://agentfirewall-mauve.vercel.app