AI-Infra-Guard 数据自动同步 API:不重启服务、不重建镜像热更新 AI 安全规则

AI-Infra-Guard 数据自动同步 API:不重启服务、不重建镜像热更新 AI 安全规则 AI-Infra-Guard 数据自动同步 API不重启服务、不重建镜像热更新 AI 安全规则【免费下载链接】AI-Infra-GuardA full-stack AI Red Teaming platform securing AI ecosystems via Agent Scan, Skills Scan, MCP scan, AI Infra scan and LLM jailbreak evaluation.项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Infra-GuardA.I.GAI-Infra-Guard依赖data/目录下的规则文件完成 AI 基础设施扫描指纹识别、CVE 漏洞匹配、MCP 安全插件与越狱评估数据集都存放于此。Data Auto-Sync API接口文档让你通过两个 HTTP 端点从官方 GitHub 仓库拉取最新规则直接覆盖到服务器工作目录整个过程无需重启进程或重建 Docker 镜像。读完本文你将掌握同步接口的完整调用方式、响应字段含义、异步轮询的最佳实践以及该机制在 common/websocket/update_api.go 中的实现原理与并发/安全设计。接口总览项目值Base URLhttp://localhost:8088按实际部署地址调整鉴权无需认证同步源Tencent/AI-Infra-Guard的main分支源码中为常量defaultGitHubRepo同步方式git clone --depth 1到临时目录再复制data/子目录到工作目录无需 GitHub Token两个操作共用同一路径/api/v1/system/update-data以 HTTP 方法区分POST触发同步异步执行立即返回GET查询同步状态/进度。路由在 common/websocket/server.go 中注册于v1.Group(/system)组下system : v1.Group(/system) system.Use(setupIdentityMiddleware()) { system.POST(/update-data, HandleTriggerDataUpdate) system.GET(/update-data, HandleGetUpdateStatus) }同步会更新哪些数据目录从 update_api.go 的常量定义可以看到同步固定拉取以下 6 个data/子目录dataDirsDefault fingerprints,vuln,vuln_en,mcp,eval,agents目录内容对应功能data/fingerprints/YAML 指纹规则Ollama、vLLM、Dify、Gradio 等 AI 组件AI 基础设施识别data/vuln/中文 CVE 漏洞库按组件分目录组织漏洞匹配中文data/vuln_en/英文版 CVE 漏洞库漏洞匹配英文data/mcp/MCP 安全扫描插件规则含 Prompt 模板MCP Server 安全扫描data/eval/越狱/有害内容评估数据集JailBench、advbench 等 JSONLLM 越狱评估data/agents/Agent 扫描相关数据Agent 扫描这些目录中的规则文件会被扫描器加载执行例如指纹规则由 common/fingerprints/preload/preload.go 中的Runner驱动通过 DSL 表达式匹配 HTTP 响应。由于更新是直接写盘的新规则在下次扫描时即生效。端点一触发数据同步POST /api/v1/system/update-data项目值URL/api/v1/system/update-dataMethodPOSTRequest Body不需要服务端会绑定并忽略任意 JSON 体请求不带任何参数。从源码可以看到ref与目录列表均为包级常量main分支、全部 6 个目录调用方无法指定其他分支或目录——这是刻意的设计// common/websocket/update_api.go const ref defaultGitHubBranch // 恒为 main const dirs dataDirsDefault // 恒为全部 data 子目录响应字段data对象字段类型说明runningbool是否正在同步successbool上次同步是否成功从未运行时为null/缺省started_atstring同步开始时间ISO-8601finished_atstring同步结束时间仍在运行时为null/缺省messagestring人类可读的状态信息files_updatedint本次写入磁盘的文件数refstring本次同步使用的分支恒为main所有响应均包裹在项目统一的{status, message, data}信封中。按项目约定status 0表示正常空闲/运行中/成功status 1表示最近一次同步失败见 HandleGetUpdateStatus 中的状态码判定逻辑。cURL 示例curl -X POST http://localhost:8088/api/v1/system/update-data示例响应同步已启动{ status: 0, message: sync started, data: { running: true, started_at: 2026-04-20T10:00:00Z, message: cloning repository…, files_updated: 0, ref: main } }端点二查询同步状态GET /api/v1/system/update-data响应信封与字段定义同触发端点。轮询该端点即可观察同步的实时进度——data.message会随执行阶段变化克隆中 → 复制中 → 完成/失败。cURL 示例curl http://localhost:8088/api/v1/system/update-data示例响应同步进行中{ status: 0, message: copying data directories…, data: { running: true, started_at: 2026-04-20T10:00:00Z, message: copying data directories…, files_updated: 0, ref: main } }示例响应同步完成{ status: 0, message: sync complete — 312 file(s) updated from ref \main\, data: { running: false, success: true, started_at: 2026-04-20T10:00:00Z, finished_at: 2026-04-20T10:00:45Z, message: sync complete — 312 file(s) updated from ref \main\, files_updated: 312, ref: main } }示例响应同步失败{ status: 1, message: git clone failed: exit status 128\nfatal: unable to access https://github.com/..., data: { running: false, success: false, started_at: 2026-04-20T10:00:00Z, finished_at: 2026-04-20T10:00:05Z, message: git clone failed: exit status 128\nfatal: unable to access https://github.com/..., files_updated: 0, ref: main } }失败场景的典型原因包括服务器PATH中缺少git可执行文件或无法访问github.com:443内网环境常见。此时message会携带 git 的完整错误输出便于排查。典型工作流与 Python 完整示例触发同步—— 调用POST /api/v1/system/update-data立即返回轮询完成—— 周期性调用GET /api/v1/system/update-data直到data.running为false检查结果—— 检查data.success与data.message无需重启—— 更新后的规则在下一次扫描时生效。import requests import time BASE_URL http://localhost:8088 # 触发同步 resp requests.post(f{BASE_URL}/api/v1/system/update-data) print(resp.json()) # 轮询直到完成 while True: status requests.get(f{BASE_URL}/api/v1/system/update-data).json() data status[data] print(f[{data[message]}] files_updated{data[files_updated]}) if not data[running]: break time.sleep(3) if data.get(success): print(fSync complete — {data[files_updated]} file(s) updated) else: print(fSync failed: {data[message]})源码级实现解析异步执行与并发控制HandleTriggerDataUpdateupdate_api.go的关键行为加锁检查updateStatus.Running——同一时刻只允许一个同步任务若已有任务在跑直接返回sync already running及当前状态快照不会启动第二个任务置Running true、记录StartedAt随后go runDataUpdate(ref, dirs)异步执行HTTP 请求立即返回状态读取GET通过sync.Mutex保护并在锁内做值拷贝快照避免读到撕裂状态。同步执行流程runDataUpdate核心函数 runDataUpdate 分为三个阶段os.MkdirTemp(aig-data-sync-*) # 1. 系统临时目录defer RemoveAll 自动清理 ↓ validateRef(ref) # 2. 防御性校验 ref恒为常量 main ↓ git clone --depth 1 --branch main repo tmpDir Env: GIT_TERMINAL_PROMPT0 # 3. 浅克隆禁止交互式凭据提示避免挂起 ↓ copyDataDirs(tmpDir, dirs) # 4. 递归复制 6 个 data/ 子目录到工作目录 ↓ finish(true, sync complete — N file(s) updated from ref \main\)细节要点浅克隆--depth 1使下载量最小化只取main分支最新一个提交GIT_TERMINAL_PROMPT0保证即便凭据缺失也会快速失败而不是阻塞 goroutine克隆失败时message拼接 git 的CombinedOutput()输出对应文档中exit status 128的失败示例复制阶段若某子目录在当前 ref 中不存在如上游删除了data/agents/会被静默跳过而非报错——copyDataDirs 中对os.Stat不存在的目录直接continue。安全设计白名单 路径穿越防护虽然当前 API 不接收任何目录参数源码仍做了完整的纵深防御对安全工具自身而言是恰当的示范allowedDataDirs白名单6 个目录白名单之外的目录名一律拒绝update_api.go复制前用filepath.Rel二次验证源路径不会逃逸出srcRoot/data/copyDir用os.DirFS只以裸文件名读取文件并对每个目标路径做“必须留在目标根内”的约束检查防止符号链接逃逸update_api.govalidateRef使用正则^[a-zA-Z0-9._\-/]$限制 git 参数字符集防止参数注入。测试佐证common/websocket/update_api_test.go 提供了对复制逻辑的完整测试覆盖用伪克隆仓库fake clone验证行为TestCopyDataDirs_selectiveDirs指定fingerprints,vuln时只复制这两个目录mcp不被复制、仓库根部的README.md不会被带入TestCopyDataDirs_allDirs使用dataDirsDefault全量复制文件计数正确TestCopyDataDirs_missingSubdir源中缺失vuln_en时静默跳过、不返回错误——印证了上面“缺失子目录不报错”的实现事实TestSplitDirs逗号分隔目录列表解析的边界情况空格、空串。运行前提与限制git二进制必须在服务器PATH中——同步完全依赖 shell 外的exec.Command(git, ...)Docker 镜像需包含 git服务器需能访问github.com:443——失败时可通过 GET 状态接口的message字段看到 git 原始错误只能拉取main分支的全部 6 个目录不提供分支/目录级别的定制参数单并发——重复 POST 不会排队直接返回当前运行状态覆盖式写入——复制过程直接覆盖同名文件权限0o644若你在本地手工修改过data/下的规则文件同步后会被上游版本覆盖。参考路径文件作用docs/api_data_update.md本 API 的官方接口文档common/websocket/update_api.go同步 API 的完整实现触发、状态、克隆、复制common/websocket/server.go/api/v1/system/update-data路由注册common/websocket/update_api_test.go目录复制与解析逻辑的测试data/被同步的规则/数据集根目录fingerprints、vuln、vuln_en、mcp、eval、agents【免费下载链接】AI-Infra-GuardA full-stack AI Red Teaming platform securing AI ecosystems via Agent Scan, Skills Scan, MCP scan, AI Infra scan and LLM jailbreak evaluation.项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Infra-Guard创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考