SafeBrowz 检测 API 基于 x402 发布横幅

一句话介绍

AI 智能体、钱包应用或浏览器扩展向我们发送任意 URL。我们返回诈骗判断结果以及 23 个威胁信号。每次请求花费 $0.001 USDC,在 Solana 或 Base 链上完成链上支付。无需注册,无需 API 密钥,无需销售对话。这就是整个产品。

有趣的地方不在于检测引擎本身,而在于当一个 HTTP API 悄然变成独立链上业务时所发生的事情。x402 是使之成为可能的基础原语,本文其余部分将对此进行详细说明。

x402 究竟是什么

HTTP 402 自 1999 年原始 HTTP/1.1 规范起就被保留为 Payment Required(需要付款)状态码。二十六年来它一直等待着互联网真正愿意采用的支付协议。2025 年,Coinbase 发布了一个具体的实现方案,x402 由此诞生。

原理很简单。客户端调用任意 HTTP 端点。如果服务器需要付款,它返回状态码 402,并附带一个描述可接受付款选项的 JSON 主体:链、代币、金额、接收地址以及服务器生成的一次性随机数(nonce)。客户端在链上完成付款,携带证明付款已发生的签名头部重试同一请求,服务器验证后返回真实响应。

这一简单模式取代了整套开发者体验样板代码:注册表单、账单门户、用量仪表板、限流分级、API 密钥轮换和催款邮件。一个端点,一个价格,一次链上结算。信用卡流程,但专为机器设计。

x402 请求/响应流程 — 初始 POST、402 挑战、链上付款、携带 X-PAYMENT 头重试、200 判断结果
图 1 · 按请求付费 API 的六步 x402 流程

构建过程中的两点观察:

  • 延迟可以接受。Solana 结算约需 ~400ms,Base 上的 USDC 转账约需 ~2 秒。整体请求(含服务器验证)耗时 1–3 秒。这比普通 API 调用慢,但比任何注册流程都快,而且智能体对几秒钟的等待毫不在意。
  • "Payment Required" 是真正的 HTTP 原语。它不是变通方案。任何支持 HTTP 的客户端都可以解析 402、读取 accepts 数组并决定是否付款。智能体框架天然适配,因为它们本来就处理 HTTP 状态码——只需要一个钱包即可。

为什么现在重要(AI 智能体没有信用卡)

2026 年的 AI 智能体面临结构性问题。它们非常擅长调用 API,却极不擅长注册 API。一个需要构建产品研究工作流的智能体要从二十个专业数据源拉取数据,而其中十九个都需要邮箱、密码、信用卡和人工审批。这种摩擦不断累积。

x402 给了智能体另一种选择:这里有一个钱包、一笔预算、一份接受付款的端点列表——去完成你的工作吧。每家开发智能代理软件的公司最终都会撞上这堵墙。我们选择率先为此而构建。

一个端点,一个价格

接口设计刻意保持最简化。

curl -X POST https://api.safebrowz.com/v1/detect \
  -H "Content-Type: application/json" \
  -d '{"url":"https://trezor-support.com"}'

首次调用,无付款头部 → 服务器返回 402 挑战:

HTTP/2 402 Payment Required
Payment-Required: eyJ4NDAyVmVyc2lvbiI6Mi...  (base64 v2 payload)

{
  "x402Version": 1,
  "status": 402,
  "error": "payment_required",
  "accepts": [
    {
      "scheme": "exact",
      "network": "solana",
      "networkCaip2": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
      "maxAmountRequired": "1000",
      "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
      "payTo": "FLQyppmJYbvQvEPAB4Mv8ZGmxkSXmXUwMACeJ79kdozW",
      "maxTimeoutSeconds": 60,
      "extra": {
        "token": "USDC", "decimals": 6,
        "nonce_binding": "memo",
        "memo_template": "safebrowz:87d311de-..."
      }
    },
    {
      "scheme": "exact",
      "network": "base",
      "networkCaip2": "eip155:8453",
      "maxAmountRequired": "1000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0xf3bc3a04646F1D721992AeDC07c98FC52FdFC358",
      "extra": {
        "token": "USDC", "decimals": 6, "chainId": 8453,
        "nonce_binding": "eip191",
        "sign_message_template": "safebrowz:87d311de-..."
      }
    }
  ]
}

客户端选择一条链,在链上支付 0.001 USDC 并绑定 nonce(Solana 使用 SPL-memo,Base 使用 EIP-191 链下签名),然后携带 X-PAYMENT 头部重试:

POST /v1/detect
Content-Type: application/json
X-PAYMENT: eyJ4NDAyVmVyc2lvbiI6MSwic2NoZW1lIjoiZXhhY3QiLC...

{"url":"https://trezor-support.com"}

服务器验证链上交易、强制 nonce 唯一性(防重放攻击),并返回完整判断结果:

HTTP/2 200 OK

{
  "verdict": "danger",
  "trust_score": 8,
  "brand": "Trezor",
  "confidence": 0.97,
  "reason": "This page impersonates Trezor and does not belong to the real brand.",
  "threat_types": [
    "brand_impersonation",
    "credential_phishing",
    "wallet_drainer"
  ],
  "signals": {
    "brand_impersonation": true,
    "credential_phishing": true,
    "wallet_drainer": true,
    "fresh_domain": true,
    "fake_captcha": false,
    "pastejacking": false,
    ...
  },
  "details": {
    "matched_brand": "Trezor",
    "official_domain": "trezor.io"
  }
}

完整响应包含 23 个布尔信号,覆盖 SafeBrowz 在 500+ 品牌和 100+ 语言中追踪的所有威胁类别。

检测流水线内部机制

从外部看,端点非常简单,但每个请求都会经过五层流水线处理。每一层都尽可能早地退出——判断越接近低成本端,响应越快、开销越小。

SafeBrowz 检测流水线 — URL 验证、共享 Redis 缓存、URL 模式引擎、AI 内容分析、决策引擎、JSON 输出
图 2 · /v1/detect 内部的五层检测流水线

逐层说明:

  1. URL 验证 + 知名安全快速通道。SSRF 防护(拦截私有 IP 字面量和保留名称)、协议检查、长度限制。然后对 80+ 个家喻户晓的域名(google.com、trezor.io、metamask.io、github.com、coinbase.com、所有顶级钱包和交易所)直接短路返回 SAFE 结果,无需任何下游处理。
  2. 共享 Redis 缓存。热门域名的判断结果在所有调用者间共享缓存——安全结果 14 天,危险结果 30 天,谨慎结果 7 天。生产环境中缓存命中率超过 80%,将每次请求的实际成本压缩至可忽略的程度。
  3. URL 模式引擎。30+ 个诈骗 URL 特征(钱包盗刷路径、加密货币空投模式、常见钓鱼形态)、一次性 TLD 列表、带同形字符标准化(rn→m、0→o 等)和 Levenshtein-1 编辑距离的品牌关键词检查(可捕获 goooglemicrosooftrnetamask)。
  4. 页面抓取 + AI 内容分析。HTML 以 5 秒超时抓取,并对每次重定向应用相同的 SSRF 防护。语言模型从页面中提取信号:声称的品牌与实际拥有的品牌、钱包盗刷脚本模式、伪造验证码(ClickFix)文案、Pastejacking 模式、凭证钓鱼结构。在 500ms 以内输出 23 个布尔值加人类可读的原因说明。只有约 20% 的流量会到达此层——其余的已被前面各步骤处理完毕。
  5. 决策引擎。信号计数 + 强制危险规则(任何 wallet_drainer、seed_phrase_phishing、fake_captcha、pastejacking 或 brand_impersonation 信号都强制判定为危险,无论正向计数如何),加上"域名无法解析"情况的 DNS 探测。输出最终判断结果、trust_score、置信度和丰富的详细信息。

端到端延迟:中位数 ~240ms(以缓存命中为主),p95 ~900ms(AI 内容层),p99 ~2.5s(恶意服务器上的页面抓取超时)。

从第一天起支持多链

我们在 Solana 主网和 Base 主网上均支持 x402。相同端点,相同响应格式,客户端选择其钱包栈已在使用的链。

代币Nonce 绑定结算时间典型手续费
Solana 主网USDC (0.001) 或 SOL (0.00001)SPL-memo 指令~400ms~$0.0002
Base 主网USDC (0.001)EIP-191 链下签名~2 秒~$0.002

Solana 是显而易见的起点。transferChecked SPL 代币指令加上将 nonce 绑定到唯一交易的 spl-memo 指令,使防重放攻击变得轻而易举——memo 在链上,每笔交易唯一,且无法被剥离。亚秒级结算非常适合智能体工作负载。

Base 覆盖了所有已在 EVM 生态系统中运营的开发者——任何使用 viem、wagmi、MetaMask 集成或 Coinbase 开发者平台的人。对于 ERC-20 转账,纯链上 nonce 并不现实(没有 memo 字段),因此 nonce 绑定通过链下方式实现:付款方对消息 safebrowz:<nonce> 进行 EIP-191 personal_sign 签名,恢复的地址必须与链上 Transfer 事件的发送方匹配。无需额外交易,完全防重放。

完整客户端 — TypeScript + viem(Base)

这是一个可运行的实现,适合单屏展示。

import { createWalletClient, http, parseUnits, erc20Abi } from "viem";
import { base } from "viem/chains";
import { privateKeyToAccount } from "viem/accounts";

const USDC_BASE = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
const URL = "https://api.safebrowz.com/v1/detect";
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const wallet  = createWalletClient({ account, chain: base, transport: http() });

export async function detect(target: string) {
  // 1. First call — expect 402
  const first = await fetch(URL, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ url: target }),
  });
  if (first.status !== 402) return first.json();
  const challenge = await first.json();
  const baseEntry = challenge.accepts.find((a: any) => a.network === "base");

  // 2. Pay USDC onchain to the configured receiver
  const txHash = await wallet.writeContract({
    address: USDC_BASE, abi: erc20Abi, functionName: "transfer",
    args: [baseEntry.payTo, parseUnits("0.001", 6)],
  });

  // 3. Sign the off-chain nonce binding (EIP-191 personal_sign)
  const walletSig = await wallet.signMessage({
    message: baseEntry.extra.sign_message_template,
  });

  // 4. Retry with the spec-compliant X-PAYMENT header
  const xPayment = Buffer.from(JSON.stringify({
    x402Version: 1, scheme: "exact", network: "base",
    payload: {
      txHash,
      walletSig,
      nonce: baseEntry.extra.sign_message_template.split(":")[1],
    },
  })).toString("base64");

  const verdict = await fetch(URL, {
    method: "POST",
    headers: { "Content-Type": "application/json", "X-PAYMENT": xPayment },
    body: JSON.stringify({ url: target }),
  });
  return verdict.json();
}

完整客户端 — Python on Solana

相同的流程,使用 solana-py 在 Solana 上实现。memo 绑定取代了链下签名步骤。

import base64, json, httpx
from solana.rpc.api import Client
from solders.keypair import Keypair
from solders.transaction import Transaction
from solders.pubkey import Pubkey
from spl.token.instructions import transfer_checked, TransferCheckedParams
from spl.token.constants import TOKEN_PROGRAM_ID

USDC_MINT = Pubkey.from_string("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v")
RPC_URL   = "https://api.mainnet-beta.solana.com"
rpc       = Client(RPC_URL)
kp        = Keypair.from_base58_string(os.environ["SOLANA_SECRET"])

def detect(target: str) -> dict:
    # 1. Challenge
    r = httpx.post("https://api.safebrowz.com/v1/detect",
                   json={"url": target})
    if r.status_code != 402:
        return r.json()
    sol_entry = next(a for a in r.json()["accepts"] if a["network"] == "solana")

    # 2. Build USDC transferChecked + spl-memo binding the nonce
    memo = sol_entry["extra"]["memo_template"]   # "safebrowz:<nonce>"
    tx   = build_usdc_transfer_with_memo(
        payer=kp.pubkey(),
        receiver=Pubkey.from_string(sol_entry["payTo"]),
        amount_atomic=int(sol_entry["maxAmountRequired"]),
        memo_text=memo,
    )
    tx.sign([kp], rpc.get_latest_blockhash().value.blockhash)
    tx_sig = rpc.send_transaction(tx).value

    # 3. Retry with X-PAYMENT
    x_payment = base64.b64encode(json.dumps({
        "x402Version": 1, "scheme": "exact", "network": "solana",
        "payload": {"txSignature": str(tx_sig), "nonce": memo.split(":")[1]},
    }).encode()).decode()

    return httpx.post(
        "https://api.safebrowz.com/v1/detect",
        headers={"X-PAYMENT": x_payment},
        json={"url": target},
    ).json()

通过 agentcash 实现零配置客户端

如果您不想自己实现付款流程,x402 生态系统已经提供了可以自动处理整个流程的 CLI 和库客户端:

npx agentcash fetch https://api.safebrowz.com/v1/detect \
  --body '{"url":"https://trezor-support.com"}' \
  --network solana

CLI 会检测 402 状态,从已配置的钱包中签名并广播 USDC 付款,携带符合规范的 X-PAYMENT 头部重试,并打印判断结果。一行命令搞定。

面向智能体的发现机制

除端点本身外,我们还发布了 AI 智能体无需人工介入即可发现、理解并集成 API 所需的所有工件:

工件路径使用方
OpenAPI 3.1 规范/v1/openapi.jsonSDK 生成器、Postman、ChatGPT Actions
x402 发现文档/.well-known/x402x402scan、Coinbase Bazaar、agentcash
智能体技能文件/safebrowz-api.skill.mdClaude 技能、GPT 工具使用、LangChain、MCP 服务器
AI 插件清单/.well-known/ai-plugin.json旧版 GPT 插件、ChatGPT 连接器
llms.txt/api-llms.txtChatGPT 式检索爬虫

智能体框架可以读取其中任一文件,构建工具定义,并在单次对话轮次中开始为扫描付费。这是 2026 年"智能体就绪"的标准。

为什么定价 $0.001 而不是更高

在真实数据到来之前,为新 API 定价只能凭直觉。我们从三个角度分析,三个角度都指向同一个数字。

利润角度。每次扫描的上游成本摊薄后(缓存命中补贴 AI 内容调用)低于 $0.0002。在 $0.001 的定价下,即使买家自己承担 gas 费(Solana 上几乎可忽略,Base 上是几美分),我们也保持着健康的利润率。

市场角度。商业 URL 安全 API 的定价在您能注册时为每 1000 次调用 $2 到 $10。每次调用 $0.001 即每 1000 次 $1。我们的定价是为了成为开发者首先使用的依赖项,而不是第三个。

智能体经济角度。一个智能体在一次会话中发送 100 次 URL 检查,每次 $0.001,总共 $0.10。这个价位使得集成我们对于任何不希望成为钱包盗刷载体的智能体来说都是毋庸置疑的选择。

由买家支付 gas,有意为之

x402 生态系统在 gas 问题上有两派观点。在中间商结算模式中,服务器(或共享中继器)代表买家提交链上转账,吸收 gas 并从付款金额中扣回。在买家支付 gas模式中,客户端自己广播转账。我们选择了后者。

在每次请求 $0.001 的情况下,数学计算是残酷的。正常情况下 Base 上 USDC 转账的 gas 费约为 $0.002–0.005。如果我们吸收这部分费用,在完成任何工作之前付款就已经亏损。在有意义的交易量下,我们将以亏损运营 API。

买家支付 gas 模式解决了这个问题。客户端本身已经在使用钱包栈,而广播对他们来说成本很低。我们验证链上结果,返回判断,保持利润完整。对于每种真实的集成路径——使用自己钱包的开发者、由运营者预充值的智能体、运行后端代理的钱包应用——gas 都不是重要成本。

我们已实现中继器路径并置于功能标志后。目前,买家支付 gas 保持了经济模型的清晰性。如果企业需求发生变化,我们可以在 15 秒内切换标志。

两种层级:面向所有人的 x402 和面向企业的 Bearer 密钥

公共端点运行 x402 按请求付费。这非常适合一次性开发集成、每次会话调用少量 URL 的 AI 智能体,以及任何想要在不填写注册表单的情况下体验的人。

对于背后有数百万最终用户的钱包应用和平台,每次调用的链上签名是不切实际的。MetaMask 不会让其扩展在用户每次悬停链接时签署 USDC 交易。因此存在第二个层级。

企业 Bearer 密钥按需为高流量集成商提供。一个形如 sk_live_... 的长效令牌,以 Authorization: Bearer sk_live_... 传递,完全跳过 x402 流程。每个密钥有自己的速率限制(在配置时协商,通常为每分钟 10,000 到 100,000 次请求)和独立的用量账本。按月以 USDC 统一订阅方式计费。

适用对象

  • AI 智能体框架 — Claude 技能、GPT 工具使用、LangChain、MCP 服务器。任何从用户输入或网络解析 URL 的智能体在点击前都需要安全检查。
  • 钱包应用 — MetaMask snap、Phantom 扩展、Trust Wallet、Rainbow、Rabby。连接前的 URL 安全检测将阻止我们每月看到的大多数钱包盗刷事件。
  • dApp 前端 — 任何嵌入第三方链接、社区提交内容或市场列表的应用。每次点击 $0.001 的安全判断比用户被盗刷后的一条愤怒推文便宜得多。
  • 浏览器扩展 — 希望将 URL 判断外包而不运行自己检测引擎的生产力和安全工具。
  • 智能体搜索引擎 — Perplexity 类克隆、Arc 类浏览器、个人研究智能体。每个呈现的链接如果不加过滤都可能是盗刷的载体。
  • Telegram / Discord 机器人 — 社区管理工具。我们自己就在 @SafeBrowzbot 运营一个。

下一步计划

  • 更多链 — Arbitrum + Optimism 计划于 Q3 支持,Polygon 待需求证明后跟进。相同端点,相同响应,402 accepts 数组中增加新条目。
  • 批量扫描 — 用于需要一次处理 50+ 个 URL 的工作流的 POST /v1/detect/batch。线性定价,小额并发折扣。
  • Webhook 流式层 — 面向需要实时告警流而非轮询的企业客户。相同的 Bearer 认证,持久 WebSocket,更高速率限制。

我们还入驻了 x402scan,这是 x402 启用服务的生态目录。随着越来越多的客户端(agentcash、Coinbase Bazaar、CDP 钱包)上线,该目录正在成为智能体原生的 API 市场等价物。

立即体验

在线演示可在 safebrowz.com/api-docs 访问。连接 Phantom 或 MetaMask,扫描任意 URL,查看判断结果。即使是从未接触过 x402 的人,端到端集成也在一小时内完成——您只为实际使用付费。

我们相信开放支付端点将在两年内成为机器对机器商务的主导形态。我们宁愿成为率先上线的网络钓鱼安全层,而不是姗姗来迟的那个。如果您在构建任何涉及 URL 或钱包的产品,请尝试并告诉我们哪里出了问题。

一小时内开始集成

SafeBrowz 检测 API 已在 api.safebrowz.com/v1/detect 上线。按请求付费的 URL 安全检测,在 Solana 或 Base 上支付 $0.001 USDC。无需注册,无需 API 密钥。企业 Bearer 密钥可按需申请。

阅读 API 文档 OpenAPI 规范 智能体技能文件 Telegram 机器人

由 SafeBrowz 浏览器扩展背后的同一团队构建,该扩展在 Chrome、Firefox 和 Edge 上拦截网络钓鱼和钱包盗刷攻击。

相关文章