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 端點,通過在每個請求上執行驗證,有效阻止自動化濫用,同時允許合法流量通過。