ethereum-optimism/op-injection-scanner

GitHub: ethereum-optimism/op-injection-scanner

一个基于 MCP 协议的 AI Agent 安全防护服务器,通过多层级 LLM 检测机制扫描外部 URL 内容中的 prompt injection 攻击,保护 Agent 免受恶意内容劫持。

Stars: 0 | Forks: 0

# op-injection-scanner 一个用于 prompt injection 边界强制执行的 MCP server。AI agent 调用 `scan_url(url)` 而非直接获取 URL。该 server 获取 URL(带有 SSRF 保护),将 HTML 剥离为纯文本,并使用三层模型升级策略(Haiku → Sonnet → Opus)扫描内容是否存在 prompt injection。结果按 URL 和 TTL 桶进行缓存,因此在缓存窗口内的重复调用不会产生额外的 LLM 成本。 ## 安装 ``` git clone https://github.com/ethereum-optimism/op-injection-scanner cd op-injection-scanner bun install ``` ## Claude Code MCP 配置 添加到 `~/.claude.json` 或你项目的 `.claude/settings.json`: ``` { "mcpServers": { "op-injection-scanner": { "command": "bun", "args": ["run", "/absolute/path/to/op-injection-scanner/src/server.ts"] } } } ``` 该 server 需要环境中设置 `ANTHROPIC_API_KEY`。 ## 使用方法 Agent 调用 `scan_url` 并传入 URL,而不是直接获取它: ``` scan_url({ url: "https://some-external-docs.example.com/page" }) ``` **Clean 响应** — 状态 200,tool 返回: ``` { "status": "clean", "content": "The stripped page text...", "url": "https://some-external-docs.example.com/page", "scanned_at": "2026-03-08T12:00:00.000Z", "model_used": "claude-haiku-4-5", "escalated": false } ``` **Blocked 响应** — tool 返回 `isError: true`,因此调用的 agent 会收到一个 tool 错误: ``` { "status": "blocked", "reason": "Content contains instructions attempting to override agent behaviour", "url": "https://malicious.example.com/page", "scanned_at": "2026-03-08T12:00:00.000Z", "model_used": "claude-haiku-4-5", "escalated": false } ``` 当 tool 返回 `isError: true` 时,调用的 agent 不应继续处理该 URL。 ## 环境变量 | Variable | Default | Purpose | |----------|---------|---------| | `ANTHROPIC_API_KEY` | (required) | Anthropic API key — SDK 自动读取 | | `CACHE_MAX_ENTRIES` | `500` | 缓存扫描结果的最大数量 | | `CACHE_TTL_SECONDS` | `3600` | 缓存条目生命周期(秒)(1 小时) | | `CONFIDENCE_THRESHOLD` | `0.8` | 判定的最低置信度 — 低于此值则升级到下一层 | | `FETCH_TIMEOUT_MS` | `10000` | HTTP 请求超时时间(毫秒) | | `MAX_RESPONSE_BYTES` | `2097152` | 最大响应体大小 (2 MB) | | `MAX_REDIRECTS` | `5` | 最大 HTTP 重定向跟随次数 | | `MAX_URL_LENGTH` | `2048` | 最大 URL 长度(字符数) | ## 设计决策 ### 为什么选择 MCP 而非 hook Claude Code hook 会在每次 tool 调用时自动触发,但无法选择性地调用或独立测试。MCP server 是显式的 — agent 选择加入扫描,接口可测试,并且可以在不触及 hook 基础设施的情况下进行扩展(新 tool、新扫描类型)。 ### v1 范围 此版本仅检测 prompt injection。恶意意图检测(例如钓鱼、凭据收集)将在未来迭代中实现。`clean` 判定意味着"未检测到注入尝试" — 而非"内容在各方面都是安全的"。 ### 分层模型策略 - **Haiku** — 快速、便宜,处理大多数明显的案例 - **Sonnet** — 当 Haiku 返回 `uncertain` 或置信度 < 0.8 时升级 - **Opus** — 最终仲裁者,仅在 Sonnet 也无法得出置信判定时调用;schema 强制执行确定的 `clean` 或 `blocked` 判定(不允许 `uncertain`);解析失败默认为 `blocked` ### 无认证或速率限制 这是内部开发工具。网络隔离即访问控制。认证和按会话的速率限制在源代码中已作为未来工作记录。 ### DNS rebinding(已知的 v1 限制) SSRF 防护在请求前解析一次 DNS 并检查所有返回的 IP。控制低 TTL DNS 记录的复杂攻击者可能在初始检查时返回公网 IP,并在 TCP 连接时重新解析为私有 IP,从而绕过防护。完整的缓解措施需要自定义 DNS-pinning HTTP 客户端。这对内部工具是可以接受的,但在任何公共或共享部署之前必须解决。
标签:AI安全, AI防御工具, Anthropic Claude, Bun, Chat Copilot, DNS 反向解析, Ethereum Optimism, LLM护栏, MCP服务器, SSRF防护, TypeScript, URL安全检测, 内容安全扫描, 多层模型检测, 大语言模型安全, 安全插件, 提示词注入防御, 智能体安全, 机密管理, 网络内容过滤, 自动化攻击, 边界强制执行