AI News HubLIVE
站内改写

如何使用 Vercel BotID 保护您的 AI 端点

Vercel BotID 是一种隐形验证码,通过在每个请求上运行客户端挑战和服务器端 checkBotId() 来保护 AI 端点,确保只有经过验证的请求才能调用推理。本文介绍了安装、配置、启用深度分析以及处理受信机器人等步骤。

Vercel BotID 是 Vercel 提供的一种隐形验证码服务,旨在保护您的 AI 端点免受自动化攻击。其工作原理是在每个请求上附加客户端挑战,并通过服务器端的 checkBotId() 函数进行分类,确保只有来自真实浏览器的请求才能触发推理。与传统的基于会话的验证不同,BotID 在每个请求上都执行检查,因此攻击者无法通过一次绕过就获得持续的访问权限。

本指南详细介绍了如何集成 BotID 以保护您的 AI 路由。首先,您需要安装 botid 包:在终端中运行 npm i botid。接着,在您的 Next.js 配置中,使用 withBotId 包装:

import { withBotId } from 'botid/next/config';
const nextConfig = { /* 您的配置 */ };
export default withBotId(nextConfig);

然后,在客户端初始化 BotID 并声明您要保护的路由。对于 Next.js 15.3 及以上版本,可以在 instrumentation-client.ts 中调用 initBotId

import { initBotId } from 'botid/client/core';
initBotId({
  protect: [
    {
      path: '/api/chat',
      method: 'POST',
    },
  ],
});

在服务器端,您需要在路由处理程序中、AI 调用之前调用 checkBotId()

import { checkBotId } from 'botid/server';
export async function POST(request: NextRequest) {
  const verification = await checkBotId();
  if (verification.isBot) {
    return NextResponse.json({ error: 'Access denied' }, { status: 403 });
  }
  // 推理仅在验证通过后运行
  const result = await runInference(body);
  return NextResponse.json({ result });
}

对于更高安全要求的端点,您可以启用深度分析(Deep Analysis),它使用 Kasada 驱动的机器学习模型分析数千个客户端信号。深度分析能够实时学习并适应新威胁,例如在一次事件中,它通过关联跨代理节点的相同浏览器指纹,在约10分钟内识别并封锁了一个新的机器人网络。深度分析适用于 Pro 和 Enterprise 计划,且仅对调用 checkBotId() 的请求收费。

此外,BotID 还支持受信机器人(Verified Bots)功能。通过 checkBotId() 返回的 isVerifiedBotverifiedBotName 字段,您可以选择性地允许某些自动化代理(如 ChatGPT Operator)通过,同时阻止其他机器人。例如:

const { isBot, isVerifiedBot, verifiedBotName } = await checkBotId();
const isOperator = isVerifiedBot && verifiedBotName === 'chatgpt-operator';
if (isBot && !isOperator) {
  return NextResponse.json({ error: 'Access denied' }, { status: 403 });
}

如果某个受信服务不在 Vercel 的已验证机器人目录中,您可以在 Vercel WAF 中添加绕过规则,而不是移除路由保护。

最佳实践包括:始终在推理之前调用 checkBotId(),以避免浪费令牌;为不同路由设置不同的检测级别(例如,对敏感路由使用深度分析);以及注意本地开发中默认返回 isBot: false,除非设置 developmentOptions

总之,Vercel BotID 提供了一种简单而强大的方式来保护 AI 端点,通过在每个请求上执行验证,有效阻止自动化滥用,同时允许合法流量通过。