代码安全防御规则评审判官(dsh-security-judge)
审核正在写代码的会话有没有按《代码安全防御架构规则》v1.0(强制性规则)做代码安全防御、 加入了哪些代码安全防御架构、这些架构之间会不会冲突;用户授权后,未通过评审的代码任务不能算完成。
它做什么
- 自动识别所有活跃会话,判断哪些会话正在做代码(写入/编辑代码文件、构建/测试命令、项目特征), 非代码会话不评审。
- 推荐代码安全防御架构:按技术栈(Android / 服务端 / Web / 桌面 / IoT / AI)与项目特征, 给出这个程序需要几种核心架构(1 种 / 2 种 / 多种)、分别属于哪个层面、为什么需要。
- 检查架构冲突:对推荐架构、会话声明的架构、代码里实际出现的反模式做两两冲突检查 (硬冲突 / 重叠 / 张力),每条都带处理建议;未登记处理结论会阻断评审。
- 规则评审:按 A–J 十组 72 条规则(L1 强制 54 条、L2 基线 12 条、L3 建议 6 条)评审:
- 代码类规则用自动检查扫描本会话写入/编辑过的代码文本,命中即违规;
- 文件类规则检查本会话是否改到对应文件(锁文件、SBOM、混淆配置、签名材料等);
- 其余规则要求会话 AI 在
security_judge工具里逐条提交证据; - L1 不可豁免;L2/L3 由用户在面板登记豁免理由(180 天有效)。
- J 组(分发与可迁移性):检测到要产出安装包时强制做真实分发自检——包清单/入口/资源/bundle patch/绝对路径/依赖可安装性,
保证评审合格的安装包发给别人也装得上、用得了(详见
lib/dist.js)。
- 提醒与门禁(需要用户授权):
- 首次检测到写代码时向会话注入评审提醒;
- 评审未通过 = 不合格,不合格必须重做,默认合格为止:每个回合收尾时,如果代码会话不合格,
就拦截「算完成」,要求继续修复/补齐架构/提交评审,直到
verdict=pass(合格); - 默不设重做次数上限(
maxEnforcePerSession=0);用户可自行设保护阈值,或随时在面板 「暂停强制重做」(暂停后结论仍是不合格,只是暂停自动催办)。
- Web 面板:侧栏「代码安全评审判官」入口,展示授权状态、所有会话、推荐架构与「需要几种」、 架构冲突、规则进度、失败/缺失项、规则目录、架构目录、冲突矩阵与设置。
权限边界(底层逻辑,不可修改)
- 本插件权限低于用户最高权限,只用于代码安全防御规则与架构的评审。
- 可以:读取/汇总会话里已经产生的代码与工具痕迹;授权后向代码会话注入评审提醒、拦截未通过评审的代码任务。
- 不能:修改代码、修改配置、代替用户做决定、读取与代码安全防御无关的内容。
- 授权必须由用户给:未授权时插件只读观察,不注入、不拦截。授权入口在面板的「授权」卡, 需要用户两次确认;插件自己不能授权自己。
安装
1. 插件市场(推荐)
DSH Plugins → Discover 搜索「代码安全防御规则评审判官」或 dsh-security-judge,一键安装。
条目数据:data/plugins/youchen-yc__dsh-security-judge.yml(awesome-dsh-plugin 仓库)。
2. GitHub Release 预构建包
从 Releases 下载
dsh-security-judge-1.5.3.tgz,在 DSH 里用 plugin_manager 的 install_bundle 指向该 tarball。
3. 从 GitHub / Gitee 源码
git clone https://github.com/youchen-yc/dsh-security-judge
git clone https://gitee.com/youchen-yc/dsh-security-judge # Gitee 镜像
plugin_manager install_bundle target: <克隆目录的绝对路径>
4. npm
npm 上最新版本为 1.5.3(https://www.npmjs.com/package/dsh-security-judge);1.6.0 需重新授权 npm token 后发布。
plugin_manager install_bundle target: dsh-security-judge
5. 本地目录
plugin_manager install_bundle target: F:\DSH1.0\security-judge
安装后侧栏出现「代码安全评审判官」,插件列表里出现「代码安全防御规则评审判官」。
使用
会话内口令:检查审核评审该会话
在任意已有会话里对 AI 说:
检查审核评审该会话
评审判官会自动受理(也识别「评审这个会话的代码」「代码安全防御评审」「review this session」等说法):
- 回看该会话最多 2000 条历史事件(超过 24 小时的旧代码工作也会找回来),把该会话做的软件 / 插件 / 代码纳入评审;
- 面板对应会话显示「用户已要求评审」;已授权时会向该会话注入受理通知,未授权时只读受理、不注入;
- 不合格就要求该会话按规则重做,直到合格;确实没有代码工作时如实提示不涉及。
面板里每个会话的「评审该会话」按钮走同一套受理逻辑。
- 打开面板 → 「授权」卡 → 请求用户授权 → 确认授权。
- 在设置里选模式:
advisory只提示:只记录评审结论,不打断;remind提醒:不合格时向代码会话注入提醒;block阻断(默认):不合格的代码任务不能算完成,会一直要求重做到合格(需要授权)。 重做上限默认0 = 合格为止;如担心死循环可设一个阈值,或点会话里的「暂停强制重做」。
- 会话 AI 通过
security_judge工具自检与提交:action=status:本会话的代码识别、推荐架构、冲突、评审状态;action=checklist:适用规则逐条状态;action=architectures:这个程序需要几种架构、有哪些冲突;action=submit:提交证据{ architectures?, rules: { "A-02": { verdict:"pass", evidence:"…" } }, notes? };action=conflict-ack:登记架构冲突处理结论;action=authority:查看/请求用户授权。
评审结论怎么算
- 通过:范围内每条 L1 都自动通过或带证据通过;L2 全部满足或已豁免;所有架构冲突已登记处理结论。
- 不合格:任何 L1 自动命中违规、L1/L2 缺证据、冲突未登记、L1 被尝试豁免。
不合格必须重做;只有重新提交并得到
verdict=pass才算合格。 - 失效:合格之后又写了新代码,评审自动失效,需要重新提交并再次合格。
连续不合格后的「教学模式」
连续 2 次不合格后,评审判官不再只喊「重做」,而是开始教该会话 AI 怎么做:
- 回合收尾拦截时,在提醒后面附带教学单:先修哪个自动命中项、每个问题怎么改(改哪个文件、换成什么库/配置)、 哪些规则要按什么判定标准补证据、补哪个核心架构怎么落地、架构冲突怎么登记、分发自检问题怎么修;
- 教学单里带可直接照抄的
action=submit提交格式(rules / evidence / architectures); - 会话 AI 也可以随时调用
security_judge action=coach获取完整教学计划(结构化 + 中文文本); - 面板对应会话显示「已进入教学模式」。
教学单不会代替评审:改完仍要提交,直到 verdict=pass(合格)。
数据与隐私
- 扫描只读取会话事件(工具名、文件路径、写入的代码文本片段)和会话的工作目录文件名,不读与代码无关的文件内容。
- 持久化只有三样:授权状态、设置、评审历史(80 条),位置:
$DSH_PROFILE_DIR/security-judge-data/state.json(没有 profile 时用~/.dsh/security-judge-data/)。 - 会话扫描与代码片段是内存态,不落盘。
- 面板接口鉴权:每次加载生成随机页面令牌,只注入当前页面;写操作(授权/撤销/设置/评审/豁免/冲突登记等 POST)
必须带
x-security-judge-token,缺失/错误 401;跨站 Origin 一律 403。只读 GET 不要求令牌(同源页面直接读, 跨站读取被浏览器同源策略挡住)。令牌不落盘、不写日志、不出现在响应里。 残余风险:能读取本机页面 HTML 的本机进程仍可拿到令牌,这属于本机进程权限问题,不在插件可隔离范围内。
已知边界
- 自动检查是启发式规则匹配,只覆盖规则里可判定的部分;不能被自动判定的规则必须由会话 AI 提交证据, 面板不会替它编造证据。测试 / 夹具文件(路径含 test、spec、fixtures 等)会被自动检查跳过, 避免测试数据里的弱哈希样本被当成生产代码违规。
- 面板只展示「正在运行」或「最近 30 分钟内做过代码」的会话;更早的旧会话不追溯评审。
- 拦截的实现是「在回合收尾时把评审要求再推进会话一步」,不是撤销会话日志;默认合格为止、 不设次数上限;担心死循环可在设置里设阈值,或在面板「暂停强制重做」(暂停后仍是不合格)。
- 架构冲突矩阵来自《代码安全防御架构资料汇编》;冲突处理结论由用户/会话 AI 判断并登记,插件只负责检查与提醒。
- 分发自检是静态包结构检查(清单/入口/资源/补丁/绝对路径/依赖),不替代「在另一台机器实际安装一次」;
插件自身提供
dist/下的可分发 tarball 与干净目录验证记录,可按同样方式验证其他项目。 - Host 插件的代码更新需要重启 DSH 才会加载新模块;面板界面在页面刷新后使用新客户端资源。
规则与架构来源
- 《代码安全防御架构规则》v1.0(2026-10-28):A–I 九组 67 条,含 L1/L2/L3 与豁免条款; 本插件在此基础上补充 J 组「分发与可迁移性」5 条(按用户的发布要求)。
- 《代码安全防御架构资料汇编》(2026-10-28 核对版):判据层、理论层、骨架层、方法层、 供应链安全、AI 层、后量子、授权换代、运行时、合规。
文件
index.js:Host 入口(工具、系统提示、HTTP 接口、事件装配)。lib/core.js:会话跟踪、授权门禁、面板状态、工具动作。lib/engine.js:代码识别、架构推荐、冲突检查、规则评审、提醒文本。lib/catalog.js:规则目录、架构目录、冲突矩阵、自动检查模式。lib/dist.js:分发包自检(包清单/入口/资源/bundle patch/绝对路径/依赖可安装性)。lib/store.js:授权/设置/历史持久化。lib/httpapi.js:面板接口。client.js:Web 面板。test/selftest.mjs:引擎自测(node test/selftest.mjs)。
No comments yet. Be the first to write one.