arcjet-js
TypeScript 安全 SDK,为 AI 应用提供速率限制、机器人检测和提示词注入防护
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
TypeScript 安全 SDK,为 AI 应用提供速率限制、机器人检测和提示词注入防护
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你刚上线了一个 AI 助手,用户可以通过 API 调用 GPT-4 回答问题。上线第一天,凌晨三点,你被账单惊醒——有人用脚本批量调用了上万次,GPT-4 的费用账单直接爆表。这不是科幻,而是 2024 年以来大量 AI 应用开发者面临的真实困境。
Arcjet 正是为解决这一问题而生的开源安全 SDK。它不是传统意义上的防火墙,而是一个「跟代码绑在一起」的运行时安全平台——安全规则直接嵌入到你的 AI 应用代码里,实时拦截 bots、滥用行为和数据泄露风险。
Arcjet 由 ex-Akamai 工程师创立,核心团队在 Web 安全领域有深厚积累。随着 LLM 和 AI Agent 的爆发式应用,他们观察到两个新趋势:
一是 AI 预算被薅羊毛。 传统的速率限制方案无法区分真实用户和自动化脚本——攻击者用几行 Python 就能让你的 AI API 账单瞬间爆炸。2024 年多家 AI 创业公司因此损失数万至数十万美元。
二是 Prompt Injection(提示词注入)成为新威胁。 当 AI 应用需要处理外部输入(如用户消息、文件内容)时,恶意用户可以在输入中嵌入指令,诱导 AI 执行非预期操作。传统 WAF 对这种攻击束手无策,因为攻击流量看起来和正常用户完全一样。
Arcjet 的思路是:从应用层入手,在代码级别识别并拦截这些攻击,而不是依赖网络层的黑名单。
Arcjet-JS 是一个 TypeScript monorepo,使用 Turborepo 管理多包结构,包含 12+ 个子包,覆盖主流 JS 运行时和框架:
| 包名 | 适用场景 |
|---|---|
@arcjet/next | Next.js 应用 |
@arcjet/node | 通用 Node.js / Express / Fastify |
@arcjet/bun | Bun 运行时 |
@arcjet/deno | Deno 运行时 |
@arcjet/guard | AI Agent 工具调用 / MCP 服务器 / 队列任务 |
@arcjet/analyze-wasm | 本地 WebAssembly 分析引擎 |
核心架构分为三层:
通用核心层(arcjet):定义通用的 TypeScript API,声明所有安全规则的类型和接口。它不绑定任何特定运行时,所有框架 SDK 都依赖它。核心导出了以下保护规则:
shield:OWASP Top 10 防护,包括 SQL 注入、XSS、CSRF 等常见 Web 攻击detectBot:机器人和自动化客户端识别,支持配置允许/屏蔽特定机器人类别rateLimit:令牌桶/固定窗口/滑动窗口三种限速策略email:邮箱格式验证 + 可送达性检查(MX 记录、SMTP 验证)sensitiveInfo:敏感信息检测(信用卡、SSN、API Key 等)promptInjection:提示词注入检测,专门针对 AI 应用的输入攻击框架适配层:负责从特定框架(HTTP 请求上下文)中提取客户端信息(IP、User-Agent、Headers 等),转换为通用请求对象传给核心层处理。例如 arcjet-node 从 IncomingMessage 提取 IP 并支持代理链解析。
Guard 层(arcjet-guard):专为非 HTTP 场景设计,用于保护 AI Agent 的工具调用(tool calls)和 MCP 服务器。当你的 AI Agent 调用外部工具时,Guard 可以对工具参数进行安全扫描,检测注入攻击或敏感信息泄露。
WASM 分析引擎(analyze-wasm):将核心分析逻辑编译为 WebAssembly,支持在浏览器和边缘(Cloudflare Workers)环境中本地执行,无需每次都调用远程 API,减少延迟并保护隐私。
代码层面,核心 index.ts 约 400 行,结构清晰:依赖注入配置 → 规则解析 → 决策执行 → 结果缓存。所有规则都返回统一的 ArcjetDecision 对象,包含 reason(判断原因)、conclusion(allow/deny/error)和可选的 runtimeData。
最小化使用只需 4 步:
npx @arcjet/cli auth login 注册/登录npm i @arcjet/next 安装框架 SDKARCJET_KEY 环境变量protect() 方法import arcjet, { detectBot, shield } from "@arcjet/next";
const aj = arcjet({
rules: [
shield({ mode: "LIVE" }),
detectBot({ mode: "LIVE", allow: ["CATEGORY:SEARCH_ENGINE"] }),
],
});
export async function POST(req: Request) {
const decision = await aj.protect(req);
if (decision.isDenied()) return Response.json({ error: "Forbidden" }, { status: 403 });
// 正常业务逻辑...
}
Guard 的使用同样简洁,针对 AI Agent 场景:
import { guard } from "@arcjet/guard";
const gj = guard({
rules: [
promptInjection({ mode: "LIVE" }),
sensitiveInfo({ mode: "LIVE" }),
],
});
// 在 AI Agent 执行工具前
const result = await gj.protect({
toolName: "send_email",
toolArgs: userProvidedArgs
});
if (result.isDenied()) throw new Error("Tool call blocked");
所有规则都支持 DRY_RUN 模式——不实际拦截,只记录日志,方便在生产前测试规则效果。
需要云端服务:Arcjet 的核心分析引擎虽然可以本地运行(通过 WASM),但完整的威胁情报库、行为分析模型需要连接到 Arcjet 云服务。ARCJET_KEY 是必须项,不是一个纯本地 SDK。如果对数据完全自主有严格要求,这可能是障碍。
Node.js 20+ 门槛:核心包要求 Node.js >= 20,不支持更老的 Node 版本。对于仍在维护老项目的团队,迁移成本不可忽视。
AI 安全的新领域:Prompt Injection 检测是前沿方向,WASM 本地分析引擎的准确率和覆盖度仍在快速迭代中。对抗性攻击手段不断进化,安全规则也需要持续更新以应对新威胁。
Arcjet 代表了 AI 安全领域的一个新范式——Security as Code。安全不再是一次性配置的防火墙规则,而是随代码一起部署、版本化管理、测试覆盖的组件。这与 GitOps 的理念一脉相承。
从增长曲线看,Arcjet-JS 从 2024 年初的不到 100 stars 增长到现在的 673 stars,配合商业产品的快速迭代,反映了 AI 应用安全这一细分市场的真实需求。随着 AI Agent 和 MCP(Model Context Protocol)的普及,需要在「工具调用」这一层做安全防护的场景会越来越多。
对于开发者而言,Arcjet 的价值在于:它是目前为数不多的、能同时覆盖传统 Web 安全(OWASP Top 10)和 AI 特有攻击(Prompt Injection、敏感信息泄露)的 TypeScript SDK,且安装量已达 npm 周下载量数万级别,是一个经过生产验证的选择。