OWASP Juice Shop AI Agent 协作开发指南:从 AGENTS.md 理解项目规范、测试体系与 RSN 重构安全网

发布时间:2026/10/10 11:15:34
OWASP Juice Shop AI Agent 协作开发指南:从 AGENTS.md 理解项目规范、测试体系与 RSN 重构安全网 网络安全后端【免费下载链接】juice-shopOWASP Juice Shop: Probably the most modern and sophisticated insecure web application项目地址https://gitcode.com/gh_mirrors/ju/juice-shop点击查看免费下载导读本文以 AGENTS.md 为绝对核心骨架系统解读 OWASP Juice Shop 为 AI 助手Claude、GitHub Copilot、Codeium、Continue.dev、Junie 等制定的协作开发规范。全文将围绕该文档中定义的项目架构、硬性约束、测试矩阵、RSN 重构安全网机制、AI 反模式与质量清单展开并结合仓库中的 package.json、rsn/rsn.ts、.github/workflows/ci.yml、config/default.yml 等源码与配置文件逐项佐证。读完本文你将掌握在 OWASP Juice Shop 中让 AI 协作既不破坏“故意脆弱”的安全训练属性、又符合社区提交标准的完整工作流。OWASP Juice Shop 是一个故意包含大量安全漏洞的 Web 应用用于安全培训、攻防演示与漏洞意识教育。正因如此它的代码库维护规则与其他开源项目截然不同——普通项目追求“没有漏洞”而 Juice Shop 追求“漏洞可控且可教学”。AGENTS.md 正是为协调 AI 助手与这一特殊目标而编写的首要权威上下文primary authoritative source它界定了 AI 能做什么、不能做什么以及每次提交前必须通过的检查。一、项目概览AI 助手需要先建立的技术认知AGENTS.md 的项目概览章节为 AI 助手提供了理解整个仓库的基础画像这些事实均可在仓库中直接验证维度内容仓库证据项目定位用于安全培训的故意不安全 Web 应用package.json 中描述 Probably the most modern and sophisticated insecure web application主要语言TypeScript、JavaScript、Angular前端源码目录lib/、routes/、models/、frontend/src/后端技术Node.js22–26默认 24、Express、SQLite/Sequelize、MongoDB/MarsDBpackage.jsonengines.node为22 - 26.github/workflows/ci.yml 中NODE_DEFAULT_VERSION: 24依赖含express、sequelize、sqlite3、marsdb前端框架Angular 21.xfrontend/package.json 中angular/core: ^21.2.1等代码风格JS Standard Style由 ESLint 强制执行package.jsonlint脚本调用eslintCONTRIBUTING.md 第 15 行明确要求版本当前仓库juice-shop20.1.1package.jsonversion字段值得注意的是Node.js 版本号以 **package.json 的engines字段22–26**为准这与 AGENTS.md 中“22–25默认 24”的描述略有出入CI 的测试矩阵同样在 Node 22/24/26 三个版本上并行跑测试。任何依赖升级都必须以这两个文件中的实际约束为准进行验证。二、关键目录地图AI 助手定位代码的导航手册AGENTS.md 列出了项目核心目录及其职责下面是结合仓库实际内容的扩充版每一条都能在文件树中找到对应实体app.ts / server.ts应用入口。app.ts启动前先动态导入lib/startup/validateDependenciesBasic做依赖预检防止在依赖缺失时因随机 import 而崩溃随后server.start()生产环境通过npm start运行编译产物build/app。lib/工具函数与库其中lib/startup/存放初始化逻辑——如 validateDependenciesBasic.ts依赖预检、validateConfig.ts基于 config.schema.ts 的 Zod 模式校验配置。routes/Express 路由处理器覆盖登录、搜索、文件上传、反馈、订单、聊天机器人等全部 API测试对应 test/api/。models/Sequelize 数据模型SQLite 存储如user.ts、product.ts、feedback.ts。data/数据创建与管理。data/static/challenges.yml定义全部挑战data/static/codefixes/存放每个编码挑战的脆弱代码片段与修复选项文件如loginAdminChallenge_4_correct.tsdata/static/users.yml定义预置用户。views/服务端渲染模板——Handlebars.hbs如数据擦除表单与 Pug.pug如宣传视频页、用户资料页。test/server/服务端单元测试使用 Node.js 内置 test runner见package.json的test:server脚本。test/api/API 集成测试Node.js 内置 test runner Supertest。frontend/src/Angular 前端源码测试使用 Vitest。test/cypress/Cypress 端到端E2E测试。rsn/重构安全网Refactoring Safety Net脚本与差异缓存cache.json。config/YAML 配置文件含default.yml、ctf.yml、unsafe.yml、tutorial.yml、7ms.yml、test.yml等多主题配置。i18n/国际化文件禁止直接修改必须通过 Crowdin。ftp/模拟 FTP 目录提供的文件含攻击诱饵如acquisitions.md、incident-support.kdbx。monitoring/Grafana 仪表盘配置grafana-dashboard.json。.github/workflows/CI/CD 流水线ci.yml、zap_scan.yml、codeql-analysis.yml、pr-compliance.yml等。encryptionkeys/加密密钥文件如jwt.pub、premium.key。三、硬性约束AI 在“故意不安全”项目中的红线这是 AGENTS.md 中最重要、也最容易被 AI 助手忽视的部分。普通项目里 AI 被鼓励“修复所有问题”但在 Juice Shop 里安全上下文项目包含有意引入的漏洞用于训练。新增漏洞必须经维护者批准并充分文档化——随意“修好”某个漏洞或“顺手”引入一个未经批准的漏洞都会破坏挑战体系。挑战开发创建新挑战前必须先咨询维护者。AI 生成的挑战容易重复、无解或功能失调重复挑战破坏计分板无解挑战让学习者受挫。代码变更与 RSN修改挑战相关代码时重构安全网RSN必须通过——机制细节见第六节。依赖更新必须核对 package.json 与 frontend/package.json 的兼容性含engines.node与 CI 矩阵版本。翻译修改必须走 Crowdin 流程不要直接编辑i18n/或frontend/src/assets/i18n/下的 JSON。CI 中data/static/i18n/*.json与frontend/src/assets/i18n/*.json的变更甚至会被paths-ignore跳过见 ci.yml。四、推荐用例与慎用场景AI 的能力边界AGENTS.md 明确区分了 AI 助手的“安全区”与“风险区”✅ 推荐用例代码分析理解现有代码结构与模式AI 最适合做代码走查与调用链追踪。重构在保持功能不变的前提下提升代码质量。测试编写编写单元、集成与 E2E 测试——这与 CONTRIBUTING.md 第 4、5 条“新代码必须有测试”直接呼应。Bug 修复定位并修复问题。文档编写清晰的注释与文档。⚠️ 慎用场景挑战开发先咨询维护者。安全漏洞确保 AI 建议的漏洞是有意的且符合项目教学定位。依赖更新验证兼容性。架构变更重大结构调整先与维护者讨论。五、Essential Guidelines五条 AI 提交军规1. 清除 AI 生成的“噪音”这是 CONTRIBUTING.md 第 6 条的强制要求Noise (e.g. unnecessary comments) generated by AI toolsmustbe removed before opening a PR必须删除解释显而易见代码的冗长注释、通用占位注释、简单函数的过度 docstring、重复性解释、多余的console.log。必须保留复杂逻辑的有意义注释、挑战提示与元数据如data/static/codefixes/下的*.info.yml、安全相关文档。这条规则对 Juice Shop 尤其关键挑战提示与漏洞说明本身是教学资产绝不能当作“噪音”被 AI 顺手清理。2. 代码风格合规提交前运行除非只改了REFERENCES.md或SOLUTIONS.mdnpm run lint该命令在 package.json 中定义为对根目录 TS/数据/路由/模型/测试/视图执行eslint随后运行lint:config通过tsx lib/scripts/lintConfig.ts校验配置再进入frontend/执行ng lint与stylelintSCSS 检查。AI 应建议遵循 JS Standard Style 的代码但最终要以 ESLint 的实际结果为准。3. 测试要求任何代码变更除非只改REFERENCES.md/SOLUTIONS.md单元/集成测试新特性与变更应有测试。E2E 测试新/改挑战必须有 Cypress E2E 测试。RSN修改编码挑战相关代码时必须运行。本地测试命令矩阵均已在 package.json 中验证npm test # 依次跑 frontend、server、api 三套测试 npm run test:frontend # 前端单元测试Vitest经 frontend/ 下 ng test npm run test:server # 仅服务端单元测试Node.js 内置 test runner npm run test:api # API 集成测试Node.js 内置 test runner Supertest npm start npm run test:e2e # E2E 测试Cypress npm run rsn # 重构安全网其中test:server与test:api使用node --import ./test/server/helpers/test-env.mjs --import tsx --test的现代 Node 原生测试执行方式分别匹配test/server/**/*.unit.test.ts与test/api/**/*.test.ts覆盖统计由nyc完成nyc配置位于 package.json 的nyc字段只统计lib、models、routes、server.ts。4. 提交签名DCO所有提交必须签名以表明接受 Developer Certificate of Origingit commit -s -m Your commit messageCONTRIBUTING.md 第 8 条与 pr-compliance.yml 工作流共同保证这一点。5. 分支与 PR 策略基于develop分支创建特性分支CONTRIBUTING.md 第 1 条所有 PR 必须基于develop。保持 PR 单一职责、规模合理第 3 条。在 PR 描述中关联相关 issue。六、RSN重构安全网深入解析从命令到实现RSN 是 Juice Shop 独有的质量保障机制也是 AGENTS.md 反复强调的核心概念。它解决一个真实难题编码挑战Coding Challenge的“脆弱代码片段”与data/static/codefixes/中的修复选项文件必须在重构后依然保持与源代码的对应关系否则挑战的“漏洞行高亮”“修复 diff”就会失真。6.1 命令与缓存npm run rsn # 检查差异并报告 npm run rsn:update # 当变更确属挑战的一部分时更新差异缓存命令实现tsx rsn/rsn.tsrsn-update为tsx rsn/rsn-update.ts。运行结果与 rsn/cache.json当前 1388 行按挑战文件记录added/removed行号比对。6.2 工作原理源码级rsn/rsn.ts 的main()流程readFiles()读取data/static/codefixes/目录过滤掉*.info.yml与*.editorconfig得到全部修复文件清单computeDiffs(keys)对每个修复文件调用 routes/vulnCodeSnippet 中的retrieveCodeSnippet(challengeName)取回挑战当前源码片段再用diff库的diffLines计算修复文件与源码片段的差异并对照片段的vulnLines/neutralLines统计出新增/删除的非漏洞行findChangedFiles(currentData, cachedData)将新计算结果与cache.json缓存的 added/removed 行号逐一比对任何不一致的文件都会被标记为“变更”有变更时computeChallengeDiff(file)通过structuredPatch生成结构化补丁结合 codefixes 的*.info.yml中该修复选项的explanation输出人类可读的 diff 报告见 rsn/rsnOutput.ts随后printUpdateInstructions()提示npm run rsn:update并以退出码 1 失败。6.3 失败时的处理RSN 失败审查列出的差异。若变更有意属于挑战的一部分运行npm run rsn:update更新缓存。重要利用verify-rsn-fix技能.ai/skills/verify-rsn-fix/SKILL.md。重构作为挑战片段的源码时必须手动将相同变更同步到data/static/codefixes/中对应的修复文件以保持一致性。在 CI 中RSN 检查由独立的coding-challenge-rsnjob 在windows-latest上运行见 ci.yml任何“意外代码差异”都会让流水线变红。七、Skills 体系为 AI 助手预置的可复用技能包AGENTS.md 的 Skills 章节指向.ai/skills/目录已在该仓库中完整验证每个技能都是一个可被 AI 按需调用的“操作手册”技能路径用途add-reference.ai/skills/add-reference/SKILL.md向REFERENCES.md添加新的博客、演讲或其他参考资料含types/下 award/blog/conference/gsoc/lecture/podcast/summit/tools 等分类模板add-solution.ai/skills/add-solution/SKILL.md向SOLUTIONS.md添加新的破解指南、视频或工具create-m3-theme.ai/skills/create-m3-theme/SKILL.md创建新的 Angular Material M3 主题generate-release-notes.ai/skills/generate-release-notes/SKILL.md生成发布说明含 hotfix/major/minor 类型模板与检查清单verify-challenge.ai/skills/verify-challenge/SKILL.md验证新挑战满足全部项目要求与元数据检查清单在 .ai/skills/verify-challenge/checklists/challenge-checklist.mdverify-rsn-fix.ai/skills/verify-rsn-fix/SKILL.md识别并修复由代码变更引起的 RSN 破坏这类“技能清单”模式值得在团队中推广把重复性、高风险的手工操作校验挑战、修 RSN、发版沉淀为结构化技能文件让 AI 在正确时机自动发现并遵循。八、AI 上下文验证如何确认助手真的读懂了规范AGENTS.md 的 Verification of Agent Context 章节提供了一套可复现的验证手段——在对话中提出下述三类问题观察 AI 的回答是否准确引用文档主约束检查What are the security constraints for developing new challenges in this project? Refer to the primary agent guidelines.期望回答概括本文第三节“Important Constraints”中的约束新增漏洞需批准、挑战开发需咨询维护者等。技能发现检查How do I fix a break in the Refactoring Safety Net (RSN)? Is there a skill for this?期望回答指向verify-rsn-fix技能.ai/skills/verify-rsn-fix/SKILL.md。技能内容检查Show me the checklist for verifying a new challenge.期望回答展示 .ai/skills/verify-challenge/checklists/challenge-checklist.md 的内容。这套验证机制对团队管理“AI 协作成熟度”很有参考价值与其事后检查 AI 产出不如在任务开始前先验证 AI 是否已加载正确的项目上下文。九、端到端实战示例AI 辅助实施 Bug 修复AGENTS.md 给出的完整修复流程如下本文补充了每步对应的仓库依据分析Analyze让 AI 分析 issue、追踪调用链——例如定位 routes/ 下某个路由处理器与 models/ 数据模型的交互。定位Locate找到问题代码。注意区分三类代码普通应用代码、挑战相关代码data/static/codefixes/与routes/vulnCodeSnippet.ts关联、挑战元数据challenges.yml。实现Implement在 AI 辅助下实现修复同时遵循 JS Standard Style。测试Test生成测试并运行套件第五节测试矩阵若涉及挑战则补 E2E。RSNRSN若修复影响编码挑战所用代码运行npm run rsn失败时用verify-rsn-fix技能定位并将变更同步到对应 codefix 文件。签名Sign-off清理 AI 噪音、git commit -s签名提交。十、提交前质量清单Quality ChecklistAGENTS.md 的最终检查清单与 CONTRIBUTING.md 十条最低要求一一对应代码遵循 JS Standard StyleESLint 通过已移除 AI 生成的噪音测试已添加/更新且通过RSN 检查通过若修改了编码挑战相关代码完成手动验证无意外变更提交已签名DCOPR 基于develop分支单一、聚焦的范围全部 CI 检查通过结语AI 在 Juice Shop 的正确打开方式AGENTS.md 的 Remember 章节给出了整份文档的哲学落点AI 是提升开发效率的生产力工具但最终对贡献质量、正确性与安全性负责的是你或审查 PR 的人。在 OWASP Juice Shop 这样“故意不安全”的项目中这句话的分量更重——AI 的每次建议都可能影响教学挑战的完整性。对想要上手贡献的开发者与 AI 使用者建议按此路径行动阅读 CONTRIBUTING.md十条最低要求与 AGENTS.mdAI 专属规范从 config/default.yml 了解应用可配置性从 data/static/challenges.yml 认识挑战体系用第六节介绍的 RSN 命令与第七节的技能包确保任何挑战相关改动都经过安全网验证提交前跑一遍第十节的质量清单。如此AI 助手就能在 Juice Shop 这座“布满陷阱”的训练场中既发挥生产力价值又不越出安全与教学的红线。本文基于当前仓库 AGENTS.md最后更新于 2026 年 4 月撰写所有命令与路径均已在仓库源码中验证。仓库仅用于阅读与运行请勿在生成流程中直接修改仓库内容。赞分享网络安全后端【免费下载链接】juice-shopOWASP Juice Shop: Probably the most modern and sophisticated insecure web application项目地址https://gitcode.com/gh_mirrors/ju/juice-shop点击查看免费下载相关推荐Julia AGENTS.md 实战AI Agent 源码协作规范、构建测试流程与 Agent Skills 技能体系Julia AGENTS.md 实战AI Agent 源码协作规范、构建测试流程与 Agent Skills 技能体系 Julia 仓库根目录下的 AGENT编程语言编译器语言运行时标准库JIT编译SWIG 项目开发指南从 Agent 协作规范到编译器架构与测试体系SWIG 项目开发指南从 Agent 协作规范到编译器架构与测试体系 本文基于 SWIG 仓库根目录的 AGENTS.md https://link.gitc开发工具代码生成curl_cffi 仓库开发指南从 AGENTS.md 看项目结构、构建测试与协作规范curl_cffi 仓库开发指南从 AGENTS.md 看项目结构、构建测试与协作规范 本文以 curl_cffi 仓库根目录的 AGENTS.md http网络网页爬虫后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询