# 发布前安全审计报告 / Pre-Publish Security Audit > 审计对象:`lark-quote-sheet-generator` 技能 → 打包为公开 npm 插件 `@tezign/dsh-quote-sheet-generator` > 审计日期:2026-08-18 > 审计范围:技能目录全部文件(SKILL.md)、打包后的插件代码(lib/index.js)、配置(cordis.patch.yml、package.json) ## 一、结论摘要 / Summary | 项目 | 结果 | |---|---| | 硬编码 API Key / token / 密钥 | ✅ 未发现 | | 内部域名 / 私有服务地址 | ✅ 未发现(示例链接为公开占位符 example.larksuite.com) | | 内部文档 / Base / 群组 ID | ✅ 未发现 | | 公司内部流程信息 | ⚠️ 发现 2 处"特赞科技"品牌字样,已通用化 | | 可配置性(凭据注入) | ✅ 凭据由 lark-cli 在本机管理,插件零密钥 | **结论:本插件可以安全公开发布,不泄露任何隐私与接口数据。** ## 二、扫描明细 / Findings ### 2.1 密钥类扫描(全绿) 对技能目录执行了正则扫描,覆盖以下模式,**全部未命中**: ``` sk-[a-zA-Z0-9]{10,} AKLT* app_secret / appSecret api_key / apikey password / pwd Bearer base_token spreadsheet_token(仅占位符 {xxx}) open_id / chat_id 内部域名(*.aiforce.cloud、feishu.cn 内链等) ``` 说明:SKILL.md 中出现的 `{spreadsheet_token}`、`{sheet_id}` 等均为**占位符变量**(花括号包裹),非真实 token。 ### 2.2 品牌 / 内部信息(已处理) | 位置 | 原文 | 处理 | |---|---|---| | frontmatter description | "为**特赞科技**的商务报价场景…" | 改为通用表述"为客户…" | | 正文首段 | "为**特赞科技**的商务报价场景快速生成…" | 改为"为客户的商务报价场景…" | ### 2.3 内部关联技能引用(已处理) 原技能引用了 `../lark-shared/SKILL.md`、`../lark-sheets/SKILL.md`、`../lark-pitch-doc-generator/SKILL.md` 相对路径。这些属于 lark-cli 生态技能,在公开发行版中**不作为本包依赖**,已改写为: - 前置条件段落:明确说明需自行安装 lark-cli 并认证 - 相关 Skills 段落:注明"同属 lark-cli 生态,需另行安装" ### 2.4 保留但需知晓的内容 - **人力成本参考值 / 利润率建议 / 付款节点模板**:为通用市场参考值(非保密数据),已在技能中标注"可编辑的参考默认值,应按地区/行业调整"。 ## 三、代码级安全设计 / Code-level Security 打包后的插件代码遵循 DSH 凭据教义(*Configuration carries references to secrets, never the secrets*): 1. **发布包物理无密钥** — `package.json` 的 `files` 白名单只包含 `lib`、`skills`、`cordis.patch.yml`、`README.md`、`LICENSE` 2. **配置只写引用** — `cordis.patch.yml` 只注册插件行,不含任何凭据字段 3. **运行时凭据解析** — 飞书认证完全交给用户本机 lark-cli(环境变量 / `$DSH_HOME/.credentials.yaml` / `.env`) 4. **无网络行为** — `lib/index.js` 仅做本地文件读取与技能注册,不做任何网络请求 ## 四、可复用脱敏清单 / Reusable Checklist 后续打包其他技能(讲标、视频、设计等)时按此清单过一遍: - [ ] 扫描 `sk-*` / `AKLT*` / `app_secret` / `api_key` / `Bearer` / `password` - [ ] 扫描内部域名(公司私有域、`.aiforce.cloud`、内网地址) - [ ] 扫描内部资源 ID(base_token、spreadsheet_token、docx_token、open_id、chat_id 的真实值) - [ ] 扫描公司名 / 团队名 / 客户名 / 内部项目名 - [ ] 检查相对路径引用是否指向本包外文件(需改写或声明依赖) - [ ] 确认凭据注入方式(环境变量 / credentials.yaml),禁止硬编码 - [ ] 确认 `files` 白名单不含内部文档(如本 AUDIT 不随包发布) - [ ] 功能代码确认无网络上报行为 ## 五、发布前最后确认 / Final Checks - [ ] `npm publish --dry-run` 检查包内容(确认无多余文件) - [ ] GitHub 仓库打 `dsh-plugin` topic - [ ] README 双语文案已就绪