跳到主要内容

审查 ai-security-engineering — 2026-08-27

结论: PASS(附 5 条小问题,均不拦门禁)

审查范围:Early Release 单章书(原书一章十五节)拆成 12 章 + 手写总纲,约 20.4 万字符 (原书正文约 7.7 万,约 2.65 倍,与样板 2.15 倍同量级)。审阅了全部 12 章 + index + notes/01-outline.md + 书卡,实跑四门禁,抽 5 条脚注回核原文,核 6 处书架锚全部(超出抽 3 的要求), 核对两处原文人名拼写错误的处理,三处台阶测试(06/09/12 的 §3 段首句连读)。

门禁实跑

node scripts/book-jargon.mjs ai-security-engineering
→ book-jargon: 1 本,共 0 处专业词没解释就用了(70 个专业词首次出现处都有解释)

node scripts/book-jargon.mjs ai-security-engineering --quota
→ 生面孔配额:段级超额 0 处(上限 1)、节级超额 0 处(上限 5)

node scripts/book-dodged.mjs ai-security-engineering
→ book-dodged: 1 本,共 0 个词被躲开(阈值:原书出现 ≥15 次)

node scripts/book-verify.mjs ai-security-engineering
→ ai-security-engineering: 219 处出处 + 6 处书架锚,0 处对不上

专项核对(本单特别要求)

  1. 单章书是否过度膨胀:不是。 12 章各自对应原书 1–3 个小节,切分沿用原书自身的 小节边界(原书每节本就是独立主题),没有把一节稀释成多章;唯一跨文件拆分(12 号 文件前半=规划→05 章、后半=概率总起→06 章)是转码文件里两节同文件所致,处理诚实。 notes/01-outline.md 每行「进来时以为 → 出去时知道」两头不同,且自查节逐对排除了 「两行同一件事」;12 条主走查(01:SQL/prompt 同构、02:注入穿两扇门、03:防火墙五年之死、 04:邮件 agent 逐项开权限、05:死循环事故时间线、06:两次调用+三层外壳、07:事故回溯、 08:长会话两种命运、09:代码过三道闸、10:双职责拆分手术、11:RAG 八连问打分、12:邮件秘书判卡) 全部落在正文(§4 或 §3.x),无一处放脚注/附录,编造的数与字符串全部当场标明; 06/09/12 三章走查逐步核过,每步有具体值或状态。总纲三处写清「Early Release 只含第一章、 后续章节不存在」:30 秒导读、§1「两个预期」第 1 条、§4 不覆盖表第 2 行。
  2. 安全书口径:合格。 攻击描述全部停留在原书的转述层(点名类别 + 机制一句), 唯一带载荷的走查(01 §4)用的是教科书级公开常识(' OR '1'='1' -- 与「忽略之前的指令」), 当场标注「为演示编的,攻击原理本身是公开常识」,且落脚在防御映射;无任何操作手册化内容 (无工具链、无绕过技巧、无实战配方)。防御思维(八原则的 AI 拧法、拆弹三断法、 闸门链、分级自治)均按「解决什么问题 → 怎么做 → 为什么有效 → 边界」讲透。
  3. 书架锚 6 处全核,全部属实:
    • 07 agent-skills-spec#01-spec-format.md:事实=scripts/ 为可执行代码(Python/Bash/JS)、 agent 直接跑 — 与 shelf 文档第 24/34 行吻合;
    • 07/09 llamafirewall#02-scanners.md:PromptGuard 用 Llama-Prompt-Guard-2-86M 本地分类器 打分命中即 BLOCK;AlignmentCheck 远程 LLM 审计轨迹、可疑裁决 HITL — 均吻合;
    • 08 deepagents#06-skills-memory-rubric.md:MemoryMiddleware 启动时把 AGENTS.md 常驻注入 system prompt — 吻合;
    • 09 claude-agent-sdk#03-tools-permissions-hooks.md:can_use_tool 仅在规则判 ask 时触发、 PreToolUse 钩子可拦每个调用 — 逐字吻合;
    • 10 mcp-spec#06-authorization-and-security.md:OAuth 2.1 鉴权、人在回路、禁止令牌透传 — 吻合。
  4. ③类 Willison 出处: 12 §4 与脚注 [^1] 均带一手来源 https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/(查阅于 2026-08-27),在位。
  5. 两处原文人名拼写错误,处理正确(点明而非改写):
    • 原书 19:3 拼作「Simon Willson」→ 拆解在 12 §1 与 [^1] 写明「原书拼写为 Willson, 通行拼法 Willison」,引文口径未动;
    • 原书 17:3 拼作「Karl Newport」→ 10 [^1] 写明「原文拼作 Karl Newport,通行作者名为 Cal Newport」;另 18:27 原文拼作「Liklihood」,11 [^5] 以「原文如此」点明。三处同法。
  6. 脚注抽 5 条回核原文,5/5 属实: 02[^7] (OWASP 2003 第 2 → 2025 第 1,06:5)、 03[^7] (kill chain + 名言推论 + Adversarial Tradecraft,08:15)、 05[^6] (记跨安全边界调用,10:35)、06[^3] (温度 0 论文标题逐字吻合,13:5)、 12[^4] (聊天界面即外泄通道,19:17);另核 10[^9] (22 模型 0.6B–35B、115 任务,17:45)与 index 兑现表两行(19:21 SQL≈prompt 原话、19:31 纪律底线)均属实。
  7. 判断块: 全书 4 处(01×1、index×3),「如果错,会错在」一个不缺,可证伪条件具体。
  8. 完整性: 原书 15 节 + 章首 + 小结全覆盖(sourceChapters 与 chapters.json 逐一对上); Preface 为排版约定/许可样板(铁律应跳过的那类),About the Authors 用于总纲作者介绍, 处理正确。书卡 claims/notCovered/summary/soWhat 与拆解实际覆盖一致(readChapters 由写手 另行补填,本审未动卡)。
  9. 台账泄漏: 正文零命中(许可、清洗统计、转码参数均未混入);文末斜体「回核方式」一行 属影响可信度的使用说明,不算台账。

问题清单

  1. [index.md §6 兑现表] 正文有 4 处「第 N 章」承诺未记账:02 §3.3「零信任第 09 章细讲」、 04 §3.2 链图「概率性第 06 章展开」、01 §3.2「非确定性第 06 章专讲」、01 §3.3 「这些第 02 章逐个讲」 — 违反「每一处往后指都要在兑现表记一行」 — 建议补 4 行 (内容均已在对应章兑现,属记账遗漏,不是虚假承诺)。
  2. [02-two-doors.md §3.2] 老控制清单被拆成两个连续表格(前 2 行一表、后 2 行一表, 表头重复),读者会当成排版事故 — 建议合并为一张四行表。
  3. [02-two-doors.md §7 第 7 条] 「老 four 件套」中英混排笔误 — 改「老四件套」。
  4. [05-when-prevention-fails.md §3.4 末段] 三个并列引号间标点不一致 (「……」「……」、「……」)— 统一为顿号或删顿号。
  5. [docs-lint 只报不拦] 段落墙 24 处、顿号串 14 处(多为脚注地址,标准已豁免); 正文侧 11 §3.4 路径二一段 5 行未分段,建议按行文十三条第 5 条拆分。宽松期不拦, 列此备改。

收尾自检表过项情况

完整性✓ 生词✓(0 未解释) 台阶✓(3 章段首句连读不跳) 走查✓(12 章全在正文) 句子✓(dodged 0、TODO 0) 数字✓(演示数全标) 许诺△(见问题 1,内容全兑现) 总纲✓(第 2 节可独立复述全书,海拔正确,无机制下放) 出处✓(219+6 全对上) 分层✓ 诚实✓(经验判断与证据分开标;自造词 BIC 注明是作者自提) 来源✓(书架锚带 事实=,③类带查阅日期) 干净✓ 版权✓(无整段搬原文,抽 5 条均为转述) 锚✓(6/6 吻合) 主人认可:待主人读(本审不代行)。

附:篇幅与膨胀判定数据

原书正文(04–19 号文件)77,216 字符;拆解 12 章 188,235 字符 + index 18,503 ≈ 2.65 倍, 高于样板 2.15 倍但增量全部来自补解释/走查/书架印证,非复述膨胀(逐章比对见专项第 1 条); 各章 12.4k–21.2k 字符,高于代码书架单章 9k–11k 的下限。