the-missing-pink/ai-repository-security-baseline

GitHub: the-missing-pink/ai-repository-security-baseline

一套为多种AI编码助手(如Cursor、Copilot)提供统一安全与行为基线的即插即用配置模板。

Stars: 10 | Forks: 2

# AI 仓库安全基线 ## 为何存在此项目 AI 编码助手如今无处不在。Cursor、Copilot、Claude Code、Codex、Windsurf、Cline、Junie、Devin —— 每位开发者的编辑器中至少有一个处于开启状态,大多数团队会轮换使用多个。它们非常有用、高效,而且坦率地说,一旦你习惯了它们,就很难在没有它们的情况下工作。 但它们也会读取你的代码。它们会读取你的配置文件。它们会读取你指向的任何内容。如果没有适当的引导,它们会欣然窥探你的 `.env` 文件,建议一个实际上不存在(而攻击者已贴心地以该确切名称发布)的包,为了“修复”构建而编辑你的 CI 管道,或者在你要求它“为此函数添加文档”时,将数据库连接字符串粘贴到注释中。 这些行为并非助手心怀恶意。它们只是在遵循指令并试图提供帮助。问题在于,指令通常没有告诉它们*不应该*做什么。 本仓库旨在解决这一问题。 ## 这是什么 一套适用于最常见 AI 代理和 IDE 插件的、即插即用的指令文件。每个文件都指向一个共享文档 —— `AGENTS.md` —— 该文档列出了项目遵循的规则:不要动 `.env` 文件,不要未经询问就添加依赖项,不要修改 CI 管道,要编写测试,要遵守隐私规则,等等。 你只需将这些文件放入你的仓库,填写项目相关的占位符,提交,然后就完成了。从那时起,无论开发者碰巧使用哪个代理,它都会读取自己首选的配置文件,并最终与其他所有人遵循同一套规则。 目标不是让代理变得不那么有用。而是花一次十分钟,设置合理的默认值,然后就不用再操心了。 ## 如何使用 简短版本: 1. 将本仓库中的文件复制到你的项目中。 2. 打开 `AGENTS.md` 并填写标记为 `[PLACEHOLDER]` 的部分(项目名称、技术栈、命名约定等)。大多数代理会主动帮你完成这项工作——它们会读取你的代码并为你提出建议值,等待你批准。 3. 删除你未使用的任何工具配置文件。如果你的团队只使用 Cursor 和 Copilot,就没有必要保留 Aider 或 Devin 的文件。 4. 提交并推送。 就这样。下次有人在仓库中使用代理时,它们会自动识别这些文件。 如果你只想保留最低配置:保留 `AGENTS.md` 和 `.aiignore`。其他文件都是指向这两个文件的、针对特定工具的补充配置。 ## 包含内容 ### 核心中枢 - **`AGENTS.md`** —— 唯一的事实来源。共十五个部分,涵盖项目信息、安全规则、隐私规则、访问限制、测试要求、可访问性、CI/CD 策略、依赖规则以及代理自身的行为准则。这是其他所有文件指向的源头。 ### 工具特定配置 这些文件的存在是因为相关工具会读取其自身文件名。它们都将实际的规则委托给 `AGENTS.md`,因此你无需维护同一内容的十二个副本。 - `CLAUDE.md` —— Claude Code - `.cursor/rules/*.mdc` —— Cursor(六个规则文件,按文件类型划分作用域) - `.github/copilot-instructions.md` —— GitHub Copilot - `.windsurfrules` —— Windsurf - `.clinerules` —— Cline - `.continuerules` —— Continue.dev - `.aider.conf.yml` + `CONVENTIONS.md` —— Aider - `.amazonq/rules/` —— Amazon Q Developer - `.junie/guidelines.md` —— JetBrains Junie - `devin.md` —— Devin - `.sourcegraph/cody.json` —— Sourcegraph Cody - (OpenAI Codex 直接读取 `AGENTS.md`,无需额外文件) ### 忽略文件 这些文件告诉代理哪些文件完全不应该读取 —— `.env`、私钥、云凭证、SSH 密钥等等。思路与 `.gitignore` 类似,但针对的是 AI 工具。 - `.aiignore` —— 权威列表,作为其他文件的参考 - `.cursorignore`, `.clineignore`, `.aiderignore` —— 工具特定的副本 ## 规则实际涵盖的内容 `AGENTS.md` 中的指令围绕六个主要主题组织。以下是每个主题旨在防止的问题。 ### 安全性 最重要的部分。规则要求代理: - 绝对不要读取 `.env` 或任何其他密钥文件。(`.env.example` 可以。) - 不要硬编码 API 密钥、令牌、密码或连接字符串。 - 如果用户不小心将密钥粘贴到提示中,警告他们并建议他们轮换密钥。 - 注意常见的密钥模式(AWS 密钥、JWT、私钥、数据库 URL)并在出现时标记它们。 - 使用参数化查询、验证输入、编码输出。即标准的 OWASP Top 10 安全实践。 - 未经明确许可及提供前后差异对比,不得修改某些文件(CI 配置、Dockerfile、锁文件、基础设施代码、`CODEOWNERS`)。 ### 隐私性 讨论少于安全性,但同样重要: - 不要记录个人身份信息。 - 在错误消息中遮蔽或编辑个人信息。 - 未经真实的同意机制,不得添加跟踪、遥测或分析。 - 静态和传输中的敏感数据需加密。 - 代码应支持显而易见的 GDPR 权利 —— 访问、删除、导出。 ### 访问控制 代理被允许接触什么: - 停留在仓库范围内。不要访问 `~/.ssh`、`~/.aws` 或用户主目录。 - 除任务严格所需外,不得发起出站网络调用。 - 未经确认,不得运行破坏性命令(`rm -rf`、删除数据库、强制推送)。 - 不得安装全局包或修改系统配置。 ### 测试 一条简单的规则:每次提交前必须运行测试。新代码要有新测试。Bug 修复要有回归测试。不要为了通过新代码而禁用现有测试。不要使用 `--no-verify` 来跳过钩子。 ### 可访问性 如果项目包含用户界面,它必须遵循 WCAG 2.1 AA 标准。语义化 HTML、键盘导航、适当的对比度、替代文本 —— 将这些标准期望写下来,让代理在生成组件时心中有数。 ### CI/CD 与供应链 如果代理偏离脚本,可能在这两个领域造成最大破坏: - 未经明确批准,不得修改管道文件(`.github/workflows/`、`.gitlab-ci.yml` 等)。 - 未经询问不得添加依赖项。提议时需包含版本、流行度、许可证和任何已知漏洞。 - 验证包名称 —— 字符相似域名抢注是一种真实的攻击媒介,AI 代理特别容易受其影响,因为它们有时会编造不存在的包名。 - 不要重新生成锁文件。不要抑制漏洞警告。 ## 规则的结构 三点使此方案生效: **单一事实来源。** 每个工具特定文件都很简短,并以“实际规则请阅读 `AGENTS.md`”结尾。当你想更改某些内容时,只需在一个地方更改它。不会产生偏差。 **纵深防御。** 规则告诉代理该做什么。忽略文件防止代理即使尝试也读取不到敏感内容。规则还告诉代理在不确定时如何行事 —— 请求、显示差异、等待批准。 **占位符,而非假设。** 样板文件不会假装了解你的项目。诸如技术栈、命名约定、允许的命令和分支策略等都标记为 `[PLACEHOLDER]`。当代理第一次读取文件时,它通常会通过分析你的仓库来提议填写这些内容。你批准这些更改(或不批准),然后从那时起,该文件就会具体描述你的项目。 ## 为你的项目定制 当你第一次打开 `AGENTS.md` 时,你会看到针对以下内容的占位符部分: - 项目概述与架构 - 语言、框架和数据库 - 文件结构 - 命名约定 - Git 工作流和分支类型 - 允许的命令(构建、测试、检查) - 项目特定的受保护文件 你不必手动填写。在你喜欢的 AI 工具中打开项目并请求帮助。它会读取代码库,提出建议值,向你展示差异,并等待你的确认。规则要求它这样做,而不是擅自重写内容。 你也可以删除任何不需要的部分。如果你构建的是后端服务,可访问性规则就毫无意义。如果你还没有 CI,CI/CD 规则也无用武之地。删除不适用的内容。 ## 贡献 如果你发现缺失的规则、应该支持的工具,或者可以加强的模式,请提交一个 PR。唯一的实际期望是保持一致性:更改应首先落在 `AGENTS.md` 中,然后传播到工具特定的文件。 ## 许可证 Apache 2.0。随意使用。 ## 延伸阅读 如果你想深入了解安全方面: - [面向 LLM 应用的 OWASP Top 10](https://owasp.org/www-project-top-10-for-large-language-model-applications/) - [OWASP 智能体 AI 威胁](https://owasp.org/www-project-agentic-ai-threats/) - [SLSA 框架](https://slsa.dev/)(供应链完整性) - [OpenSSF 记分卡](https://securityscorecards.dev/) - [NIST AI 风险管理框架](https://www.nist.gov/artificial-intelligence/risk-management-framework)
标签:AI安全, AI编码代理, Chat Copilot, CI/CD安全, DevSecOps, Llama, Streamlit, TLS抓取, 上游代理, 代码仓库管理, 分支保护, 安全基线, 安全指南, 安全配置, 提示注入防御, 教学环境, 源代码安全, 秘密扫描, 网络安全研究, 访问控制, 软件安全, 防御加固