在 Vercel AI SDK 中保护 AI Agents

发布: (2025年12月20日 GMT+8 08:03)
5 min read
原文: Dev.to

Source: Dev.to

Cover image for Securing AI Agents in the Vercel AI SDK

2025 年是大语言模型(LLM)的时代。2026 年是 Agent 的时代。

Agent 不仅仅是回答问题——它们会执行操作。它们可以浏览网页、执行代码、查询数据库以及调用 API。这彻底改变了安全模型。

出现幻觉的 LLM 令人恼火。出现幻觉的 Agent 可能会删除你的生产数据库。

本指南面向使用 Vercel AI SDK 的开发者。Lint 规则原生支持 generateTextstreamTexttool() 等 SDK 函数。

OWASP 代理系统 Top 10 2026

类别风险
ASI01代理混淆 – 系统提示被动态覆盖
ASI02输入验证不足 – 工具参数未验证
ASI03凭证不安全 – API 密钥硬编码在配置中
ASI04输出中包含敏感数据 – 工具在响应中泄露机密
ASI05意外代码执行 – AI 输出被当作代码执行
ASI07RAG 注入 – 恶意文档注入指令
ASI08连锁故障 – 错误在代理步骤之间传播
ASI09信任边界违规 – AI 绕过授权
ASI10日志不足 – 缺乏 AI 行动的审计记录

Source:

可视化示例:问题

Vercel AI SDK 让构建代理变得轻而易举。也许太容易了。

❌ 之前:未受保护的代理

// 这段代码每天都会部署到生产环境
const result = await generateText({
  model: openai('gpt-4'),
  tools: {
    deleteUser: tool({
      execute: async ({ userId }) => {
        await db.users.delete(userId); // 没有确认,也没有校验
      },
    }),
  },
});

哪里出错了?

  • 在执行破坏性操作前没有人工确认
  • userId 参数没有进行校验
  • 没有 maxSteps 限制——代理可能无限循环
  • 缺少错误边界,导致级联故障

✅ 之后:使用 ESLint 进行保护

安装并运行 linter:

npm install eslint-plugin-vercel-ai-security --save-dev
npx eslint src/

对每个问题提供即时反馈:

🔒 CWE-862 OWASP:ASI09 CVSS:7.0 | 未经确认的破坏性工具 | HIGH
   at src/agent.ts:5:5
   Fix: 在执行前添加人工确认

🔒 CWE-20 OWASP:ASI02 CVSS:6.5 | 工具参数未校验 | MEDIUM
   at src/agent.ts:6:7
   Fix: 为工具参数添加 Zod 架构校验

🔒 CWE-400 OWASP:ASI08 CVSS:5.0 | 代理缺少 maxSteps 限制 | MEDIUM
   at src/agent.ts:3:16
   Fix: 添加 maxSteps 选项以防止无限循环

✅ 修复后的代码

import { z } from 'zod';

const result = await generateText({
  model: openai('gpt-4'),
  maxSteps: 10, // ✅ 防止无限循环
  tools: {
    deleteUser: tool({
      parameters: z.object({
        userId: z.string().uuid(), // ✅ 已校验输入
      }),
      execute: async ({ userId }, { confirmDangerous }) => {
        await confirmDangerous(); // ✅ 人工确认
        await db.users.delete(userId);
      },
    }),
  },
});

结果: 所有警告已解决。代理已具备生产就绪的安全性。

设置 (60 秒)

// eslint.config.js
import vercelAISecurity from 'eslint-plugin-vercel-ai-security';

export default [
  vercelAISecurity.configs.strict, // Maximum security for agents
];

严格模式强制执行:

  • ✅ 工具模式验证(Zod)
  • ✅ 对破坏性操作进行人工确认
  • ✅ 多步骤工作流的 maxSteps 限制
  • ✅ 级联故障的错误处理

Coverage: 9/10 OWASP Agentic Categories

eslint-plugin-vercel-ai-security 覆盖 9/10 OWASP Agentic 类别。ASI06(内存损坏)对 TypeScript 不适用。

插件能够:

  • 判断哪些函数是 Vercel AI SDK 调用
  • 判断哪些工具执行破坏性操作
  • 判断是否已就位适当的安全防护

要点

AI 代理是我们迄今为止构建的最强大——也是最危险——的软件。

有用的助手和潜在的风险之间的区别在于你所设立的安全防护措施。

不要在没有这些防护措施的情况下发布代理。

Back to Blog

相关文章

阅读更多 »

构建可信的 AI 代理

个人 AI 助手的前景建立在一个危险的假设之上:我们可以信任那些我们尚未使之可信的系统。我们做不到。而当今的版本则是……