dev-bento/secret-bento

GitHub: dev-bento/secret-bento

Secret Bento 是一个将本地密钥扫描结果脱敏处理并生成安全交接报告的 Rust CLI 工具,让开发者能安全地利用 AI 助手进行凭据清理。

Stars: 0 | Forks: 0

# Secret Bento [![Rust](https://static.pigsec.cn/wp-content/uploads/repos/cas/97/972965ca7bbf78f3ac2cef0abbd5f4e4ba10a5b0802deeebaa60e5b9b30b8f53.svg)](https://github.com/dev-bento/secret-bento/actions/workflows/rust.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Release](https://img.shields.io/github/v/release/dev-bento/secret-bento)](https://github.com/dev-bento/secret-bento/releases) 密钥扫描器和 AI 编码代理之间的 AI 安全交接层。 Secret Bento 将本地密钥扫描结果转换为经过脱敏处理的清理报告, 您可以安全地将其提供给 Codex、Claude Code、Cursor、ChatGPT 或其他 AI 助手。 在本地运行。不会上传您的代码。不会调用 AI API。 不会有意打印原始密钥值。 **Dev Bento** 的一部分:为使用 AI 工具在不泄露密钥或破坏其仓库的前提下更改、发布和维护应用程序的构建者提供的轻量级 AI 交接套件。 ## 快速开始 ``` cargo install secret-bento secret-bento handoff . --scanner gitleaks ``` Secret Bento 会生成 `SECRET_BENTO_HANDOFF.md` —— 一份经过脱敏处理的报告,其中包含 发现结果、AI 安全清理说明、仅限人工执行的操作以及验证步骤。 使用 Gitleaks 进行检测。使用 Secret Bento 将发现结果打包 为安全的修复上下文。 检查您的本地环境: ``` secret-bento doctor . ``` 验证二进制文件: ``` secret-bento --version ``` 请先在本地打开该报告。在将任何内容粘贴到 AI 聊天之前,请确认其中没有出现任何真实的 API 密钥、密码、token、数据库 URL 或 `.env` 值。 您也可以手动下载二进制文件。 从 [GitHub Releases](https://github.com/dev-bento/secret-bento/releases) 下载适用于您平台的最新二进制文件。发布资产包含 SHA256 校验和文件。 发布资产按版本和平台命名: - `secret-bento-vX.Y.Z-x86_64-pc-windows-msvc.zip` - `secret-bento-vX.Y.Z-x86_64-unknown-linux-gnu.tar.gz` - `secret-bento-vX.Y.Z-aarch64-apple-darwin.tar.gz` ## 如果 Secret Bento 发现了某些内容该怎么办 1. 不要将原始密钥粘贴到聊天中。 2. 阅读 `SECRET_BENTO_HANDOFF.md` 中的发现结果。 3. 将报告的 AI 交接提示词粘贴到 Codex、Claude Code、Cursor、ChatGPT 或您选择的 AI 工具中。 4. 让 AI 协助处理代码、文档、`.gitignore` 和 `.env.example`。 5. 自行在提供商仪表板中轮换或撤销真实暴露的密钥。 6. 重新运行 `secret-bento handoff .` 或 `secret-bento scan .`。 ## 配合 Codex、Claude Code、Cursor 或 ChatGPT 使用 该报告包含针对特定工具的提示词。当 AI 可以编辑您的本地仓库时,请使用 Codex/Cursor 或 Claude Code 提示词。当您只需要解释和清单时,请使用 ChatGPT 提示词。 这些提示词会告知 AI 工具不要索要密钥值、不要打印密钥值、不要运行破坏性的 git 命令,并且不要重写 git 历史记录。 当您想要将报告粘贴到 Codex、Claude Code、Cursor 或 ChatGPT 时,请使用 `handoff`: ``` secret-bento handoff . ``` 当您想要标准扫描报告或兼容 CI 的工作流时,请使用 `scan`: ``` secret-bento scan . ``` ## 面向现有用户和 CI 的标准扫描报告 当您想要标准报告文件名、对 CI 友好的行为或与现有工作流兼容时,请使用 `scan`: ``` secret-bento scan . ``` 这使用了轻量级的内置扫描器。它对于快速的本地冒烟测试很有用,但它并不是一个完整的密钥扫描器。 Secret Bento 会在扫描的根目录生成 `SECRET_BENTO_REPORT.md`。在与 AI 助手分享任何摘要之前,请先在本地审查该报告。 对于面向初学者的 AI 交接,请使用 `secret-bento handoff .`,它会生成 `SECRET_BENTO_HANDOFF.md`。 扫描完成后,Secret Bento 会打印一份简明的本地摘要,包含扫描器名称、报告路径、发现结果数量、退出码含义以及安全的后续步骤。 ## 推荐:使用 Gitleaks 进行更强的检测 单独安装 Gitleaks,然后运行: ``` secret-bento handoff . --scanner gitleaks ``` 在此模式下,Gitleaks 负责检测。Secret Bento 将结果转换为经过脱敏处理的 Markdown 交接报告,您可以先在本地审查,然后安全地将其提供给 AI 助手。 对于标准报告或 CI 工作流,请使用: ``` secret-bento scan . --scanner gitleaks ``` ## 什么是 Secret Bento? Secret Bento 是一个小型的 Rust CLI,它可以根据本地密钥检查创建 AI 安全交接报告。它帮助独立开发者、个人构建者和小型团队向 ChatGPT、Claude、Codex、Cursor、Gemini 或其他助手寻求清理帮助,而无需将原始凭据或整个仓库粘贴到聊天中。 Secret Bento 做三件事: - 针对仓库路径运行本地密钥检查 - 规范化来自内置检查器或本地 Gitleaks 安装的可能的发现结果 - 生成经过脱敏处理的 Markdown 交接报告,包含 AI 提示词、仅限人工执行的操作以及验证步骤 它不会上传代码、调用 AI API、自动修复密钥,也不会取代成熟的扫描器和专业的安全审查。其价值在于交接:安全的上下文打包、实用的优先级排序,以及易于提供给 AI 助手而不泄露密钥的修复指导。 ## 入门套件 Secret Bento CLI 是开源的。 如果您需要完整的工作流包,付费的 Secret Bento Starter Kit 是一个独立的包,其中包含设置指南、AI 交接提示词、清单、GitHub Actions 模板和经过脱敏处理的示例。 ## 当前状态 Secret Bento v0.6 具有两个本地报告工作流: - `secret-bento handoff .` 会生成 `SECRET_BENTO_HANDOFF.md`,这是一份简洁的 AI 安全交接报告,适用于 Codex、Claude Code、Cursor、ChatGPT 或其他助手。 - `secret-bento scan .` 会生成 `SECRET_BENTO_REPORT.md`,这是面向现有用户、CI 和扫描器类工作流的标准扫描报告。 这两种工作流都使用相同的本地密钥检查、扫描器脱敏行为和防泄露保证。Secret Bento 可以使用默认的 `builtin` 检查器,或者调度外部的 `gitleaks` CLI,规范化发现结果,并生成经过脱敏处理的 Markdown。 该 CLI 还包含简明的帮助输出、更清晰的使用错误提示、简短的完成摘要,以及非侵入式的 `doctor` 就绪检查。 `builtin` 扫描器是基础性的。它不能替代现有的密钥扫描器或专业的安全审查。 ## 使用 Doctor 检查本地就绪情况 运行: ``` secret-bento doctor ``` 或者检查特定路径: ``` secret-bento doctor . ``` Doctor 会报告 Secret Bento 版本、Gitleaks 可用性、Git 可用性、当前目录是否似乎在 git 仓库内、可选的扫描路径状态,以及默认输出目录是否似乎可写。 Doctor 不会扫描文件、读取文件内容、检查密钥、上传任何内容或调用 AI API。如果缺少 Gitleaks,Doctor 仍然会成功退出,并注明内置扫描器仍可作为冒烟测试使用。 ## 使用 Gitleaks 进行更强力的扫描 当您需要更强的扫描器覆盖范围时,请使用 Gitleaks 作为检测引擎: ``` secret-bento scan . --scanner gitleaks ``` Secret Bento 不捆绑 Gitleaks。`--scanner gitleaks` 模式会通过 shell 调用本地安装的 `gitleaks` 二进制文件,使用 `gitleaks detect --report-format json --report-path - --redact` 从 stdout 读取 JSON,在规范化过程中忽略原始的 Gitleaks `Secret` 和 `Match` 字段,并将每个结果转换为 Secret Bento 的发现结果。 在使用此模式之前,请验证 Gitleaks 已安装并在同一个 shell 中可用: ``` gitleaks version ``` 如果 `gitleaks version` 无法运行,Secret Bento 也无法运行 `--scanner gitleaks`。 ## 推荐:安装 Gitleaks Secret Bento 无需额外工具即可工作,但当检测覆盖范围很重要时,推荐使用 Gitleaks。 - Secret Bento 不捆绑 Gitleaks。 - Secret Bento 不替代 Gitleaks。 - Gitleaks 是检测引擎。 - Secret Bento 是报告和上下文打包工具。 - 当不需要依赖项进行冒烟测试时,请使用 `builtin`。 - 当您关心检测覆盖范围时,请使用 `gitleaks`。 安装 Gitleaks 后,请验证其是否可用: ``` gitleaks version ``` 然后运行: ``` secret-bento scan . --scanner gitleaks ``` ## 使用 --exclude 减少干扰 在内置扫描器中使用可重复的 `--exclude ` 过滤器,可以在扫描期间跳过产生大量干扰的本地路径: ``` secret-bento scan . --exclude docs/** --exclude tests/** --exclude **/*.md ``` 这对于故意伪造的示例报告、测试夹具、生成的文件或文档代码片段非常有用。当使用 `--scanner gitleaks` 时,请使用 Gitleaks 配置或忽略文件来进行特定于 Gitleaks 的白名单设置。 ## 使用 --output 写入报告 使用 `--output ` 选择 Markdown 报告的写入位置: ``` secret-bento scan . --output reports/secret-report.md ``` 相对输出路径将从扫描的根目录开始解析,并在需要时创建父目录。绝对输出路径将按原样使用。 ## 在 CI 中使用 Secret Bento 使用对 CI 友好的退出代码: | 退出代码 | 含义 | | ---: | --- | | 0 | 扫描完成,未发现任何结果。 | | 1 | 扫描完成,且发现了结果。 | | 2 | CLI 使用或配置错误。 | | 3 | 扫描器执行、文件 IO、JSON 解析或内部错误。 | GitHub Actions 工作流示例: ``` name: Secret scan on: pull_request: push: branches: - main jobs: secret-bento: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Download Secret Bento run: | curl -L \ -o secret-bento.tar.gz \ https://github.com/dev-bento/secret-bento/releases/download/vX.Y.Z/secret-bento-vX.Y.Z-x86_64-unknown-linux-gnu.tar.gz tar -xzf secret-bento.tar.gz sudo install \ secret-bento-vX.Y.Z-x86_64-unknown-linux-gnu/secret-bento \ /usr/local/bin/secret-bento - name: Verify Secret Bento run: secret-bento --version - name: Scan repository run: secret-bento scan . --output reports/secret-bento.md - name: Upload Secret Bento report if: always() uses: actions/upload-artifact@v4 with: name: secret-bento-report path: reports/secret-bento.md if-no-files-found: ignore ``` 退出代码 `1` 表示扫描已完成并发现了可能的密钥。默认情况下,GitHub Actions 会将其视为失败的步骤,这对于受保护的分支非常有用。Artifact 步骤仍会运行,因此您可以先检查生成的 Markdown 报告,然后再决定要轮换或清理什么。 要在 CI 中使用 Gitleaks,请在扫描步骤之前单独安装 Gitleaks,然后运行: ``` secret-bento scan . --scanner gitleaks --output reports/secret-bento.md ``` ## 安全地将报告交接给 AI 助手 Secret Bento 旨在生成经过脱敏处理的、AI 就绪的修复上下文。在将任何报告摘录粘贴到 ChatGPT、Claude、Codex、Cursor、Gemini 或其他 AI 助手之前: - 在本地审查报告。 - 确认 Markdown 中没有出现真实的密钥值。 - 仅分享获取帮助所需的发现结果和修复上下文。 - 不要将原始凭据、`.env` 内容或未脱敏的扫描器输出粘贴到聊天中。 报告中包含了可供您在本地审查后使用的 AI 交接提示词。 ## Gitleaks 安装和 PATH Secret Bento 不捆绑 Gitleaks。`--scanner gitleaks` 模式需要在您的 `PATH` 上提供本地安装的 `gitleaks` 二进制文件。 请按照适用于您操作系统的官方说明安装 Gitleaks,然后验证: ``` gitleaks version ``` 如果该命令失败,请检查包含 `gitleaks` 二进制文件的目录是否在 `PATH` 中,然后打开一个新的 shell 并重试。Secret Bento 会运行与您的 shell 解析出的相同的 `gitleaks` 命令。 当 Gitleaks 缺失或不在 `PATH` 中时,Secret Bento 会打印: ``` error: gitleaks was not found on PATH. Gitleaks is optional, but recommended for stronger detection. ``` 在修复 Gitleaks 安装时,请使用内置扫描器作为后备: ``` secret-bento scan . --scanner builtin ``` 在同一个 shell 中成功运行 `gitleaks version` 后,使用以下命令重新运行 Secret Bento: ``` secret-bento scan . --scanner gitleaks ``` 切勿将原始密钥粘贴到 AI 聊天中。Secret Bento 会在启用脱敏的情况下运行 Gitleaks,并且其 Markdown 报告设计为省略原始的 Gitleaks `Secret` 和 `Match` 值,但在分享摘录之前,您仍应在本地审查报告。 ## 使用参考 当您想要 AI 安全上下文以粘贴到助手时,请使用 `handoff`: ``` secret-bento handoff . secret-bento handoff . --scanner gitleaks secret-bento handoff . --output SECRET_BENTO_HANDOFF.md ``` 当您想要标准扫描报告或兼容 CI 的工作流时,请使用 `scan`: ``` secret-bento scan . secret-bento scan . --scanner builtin secret-bento scan . --scanner gitleaks ``` 输出示例: ``` Secret Bento handoff complete Scanner: builtin Report: /path/to/repo/SECRET_BENTO_HANDOFF.md Findings: 0 total Exit code: 0 = clean scan Note: builtin scanner is a smoke check. Use `--scanner gitleaks` for stronger detection. ``` 标准扫描输出使用扫描报告文件名: ``` Secret Bento scan complete Scanner: builtin Report: /path/to/repo/SECRET_BENTO_REPORT.md Findings: 0 total Exit code: 0 = clean scan Note: builtin scanner is a smoke check. Use `--scanner gitleaks` for stronger detection. ``` ## 从源码构建 从源码构建需要 Rust 和 Cargo: ``` cargo run -- scan . ``` 对于本地发布构建: ``` cargo build --release ``` ## 发布自动化 发布标签应与 Cargo 包版本匹配,例如对应 `version = "0.6.1"` 的 `v0.6.1`。 当推送 `v*` 标签时,GitHub Actions 会先将 crate 发布到 crates.io,然后构建并上传 GitHub Release 资产。这使得来自同一提交的 crates.io README、发布归档和 GitHub 发布保持同步。 该工作流需要存储在仓库密钥 `CARGO_REGISTRY_TOKEN` 中的 crates.io API token。 ## 适用人群 Secret Bento 适用于使用 AI 工具维护业余项目和早期产品的独立开发者、个人构建者和小型团队。 当您想向 ChatGPT、ClaudeCodex、Cursor 或 Gemini 寻求清理可能暴露的密钥的帮助,而不必将整个仓库粘贴到聊天中时,它尤其有用。 ## 为什么会有它 AI 工具擅长解释风险并将发现结果转化为清理计划,但它们需要结构化的上下文。 Secret Bento 在本地准备该上下文: - 在哪里发现了可能的类似密钥的值 - 为什么每个发现结果可能很重要 - 该发现看起来有多紧急 - 可能需要哪些修复步骤 - 哪些内容可以安全地与 AI 助手分享 ## v0.1 内置检查 当前的 `builtin` 扫描器会检查: - 可能硬编码的 API 密钥 - `.env` 追踪风险 - 包含看起来真实的值的 `.env.example` 文件 - 包含类似密钥值的 README、文档和日志 - 以 `sk-` 开头的 OpenAI 风格密钥 - 以 `sk_live_` 或 `sk_test_` 开头的 Stripe 密钥 - 以 `ghp_` 或 `github_pat_` 开头的 GitHub token - 以 `AKIA` 开头的 AWS 访问密钥 ID - Supabase 服务角色风格的变量名 - 包含 `API_KEY`、`SECRET_KEY`、`TOKEN` 或 `DATABASE_URL` 且带有非占位符值的通用代码行 发现结果默认会对检测到的值进行脱敏。 ## v0.2 Gitleaks 集成 使用 `--scanner gitleaks` 时,Secret Bento 使用 gitleaks 作为检测引擎,并专注于调度、规范化和安全修复报告。 Secret Bento 使用 `--report-path -` 从 stdout 读取 Gitleaks JSON 报告,并使用 `--redact` 调用 Gitleaks。它不会在正常操作过程中持久化原始的 Gitleaks JSON 报告文件。 规范化的报告字段包括: - 稳定的显示 ID,例如 `SB-001` - 扫描器 - 规则 ID - 严重性 - 文件 - 行 - 密钥类型 - 指纹(如果可用) - 描述 - 风险 - 修复步骤 - 验证命令 Markdown 报告包含一个报告状态块和最终的验证指南。它们不包含 gitleaks 原始的 `Secret` 或 `Match` 值,并且在规范化 Gitleaks 发现结果时也不使用这些字段。 ## 它不做的事情 Secret Bento: - 不上传代码 - 不调用 AI API - 不自动修复密钥 - 不替代专业的安全审查 - 不保证能找到所有密钥 ## AI 交接理念 Secret Bento 是本地优先和 Markdown 优先的。 它准备干净的本地上下文,以便您可以将报告交接给 ChatGPT、Claude、Codex、Cursor 或 Gemini,并寻求有关修复规划的帮助。Secret Bento 的核心价值在于 AI 就绪的修复报告、优先级排序和安全的上下文打包。 切勿将真实密钥粘贴到 AI 聊天中。Secret Bento 报告应对检测到的值进行脱敏,并仅包含足够的周边上下文以支持安全清理。 ## OSS 扫描器集成 Secret Bento 与 gitleaks 集成,而无需维护其规则集。未来的扫描器集成应遵循相同的适配器模式:在本地运行扫描器,解析其机器可读的输出,规范化为 Secret Bento 的发现结果,并保持 Markdown 输出已脱敏。 ## Rust CLI 结构 此仓库包含一个最小化的 Rust 命令行工具。 当前的高层级结构: ``` src/ main.rs thin process wrapper lib.rs CLI parsing, scan orchestration, and scanner adapters finding.rs finding model and severity labels redaction.rs redaction helpers report.rs Markdown report rendering ``` ## 路线图 参见 [ROADMAP.md](ROADMAP.md)。 ## 许可证 MIT。参见 [LICENSE](LICENSE)。
标签:AI辅助编程, Rust, StruQ, 可视化界面, 数据脱敏, 文档结构分析, 网络流量审计, 通知系统