AI News HubLIVE
站内改写

Vercel BotID で AI エンドポイントを保護する方法

Vercel BotID は、各リクエストにクライアントサイドチャレンジを付与し、サーバーサイドの checkBotId() で検証することで、確認済みのリクエストのみが推論を実行できるようにする不可視の CAPTCHA です。本ガイドでは、インストール、設定、Deep Analysis の有効化、信頼済みボットの許可について説明します。

Vercel BotID は、AI エンドポイントを自動化攻撃から保護するための不可視 CAPTCHA です。各リクエストに対してクライアントサイドのチャレンジを実行し、サーバーサイドの checkBotId() 関数で分類することで、確認されたリクエストのみが推論を実行します。セッションベースではなくリクエストベースで検証するため、攻撃者が一度バイパスしてもそのアクセスを再利用することはできません。

まず、npm i botid でパッケージをインストールします。Next.js の設定は withBotId でラップします:

import { withBotId } from 'botid/next/config';
const nextConfig = { /* 既存の設定 */ };
export default withBotId(nextConfig);

クライアント側では、initBotId() を呼び出し、保護するルートを宣言します。Next.js 15.3 以降では instrumentation-client.ts で行います:

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

サーバー側では、ルートハンドラ内で checkBotId() を AI 呼び出しの前に配置します:

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分以内に新しいボットネットを特定し、手動介入なしにブロックしました。Deep Analysis は Pro および Enterprise プランで利用可能で、checkBotId() を呼び出したリクエストのみが課金されます。

正規の自動化エージェント(例:ChatGPT Operator)を許可するには、isVerifiedBotverifiedBotName を使用します:

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

また、curl からの直接リクエストは本番環境では 403 になることに注意してください。テストはアプリケーション内のページから fetch を使用して行います。

以上のように、Vercel BotID は AI エンドポイントを保護する強力な方法を提供し、自動化された悪用を防ぎながら、正規のトラフィックを許可します。