🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

整改建议生成 feely0208/dsh-remediation

DeepSeek Harness
feely020812 天前有提交已提供中文文档扫描:含敏感能力

把检查报告逐条转成可照做的改法与验证命令

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add feely0208/dsh-remediation
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · security
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 22 处,展示前 22 条)
  • 读取本地文件
    bin/cli.mjs:24
    const pkg = JSON.parse(readFileSync(join(PKG_ROOT, 'package.json'), 'utf-8'));
  • 读取本地文件
    bin/cli.mjs:100
    if (!existsSync(file)) die(`输入报告不存在:${file}`);
  • 读取本地文件
    bin/cli.mjs:103
    st = statSync(file);
  • 读取本地文件
    bin/cli.mjs:110
    data = JSON.parse(readFileSync(file, 'utf-8'));
  • 读取本地文件
    bin/cli.mjs:127
    if (!existsSync(abs) || !statSync(abs).isDirectory()) {
  • 读取本地文件
    bin/cli.mjs:127
    if (!existsSync(abs) || !statSync(abs).isDirectory()) {
  • 写入本地文件
    bin/cli.mjs:192
    mkdirSync(outDir, { recursive: true });
  • 写入本地文件
    bin/cli.mjs:198
    writeFileSync(mdFile, markdownReport(model), 'utf-8');
  • 读取本地文件
    lib/recipes.mjs:49
    if (!existsSync(dir) || !statSync(dir).isDirectory()) return [];
  • 读取本地文件
    lib/recipes.mjs:49
    if (!existsSync(dir) || !statSync(dir).isDirectory()) return [];
  • 读取本地文件
    lib/recipes.mjs:50
    return readdirSync(dir)
  • 读取本地文件
    lib/recipes.mjs:67
    if (!existsSync(dir)) {
  • 读取本地文件
    lib/recipes.mjs:75
    r = JSON.parse(readFileSync(file, 'utf-8'));
  • 读取本地文件
    lib/apply.mjs:112
    if (!existsSync(bak)) writeFileSync(bak, readFileSync(abs));
  • 读取本地文件
    lib/apply.mjs:112
    if (!existsSync(bak)) writeFileSync(bak, readFileSync(abs));
  • 写入本地文件
    lib/apply.mjs:112
    if (!existsSync(bak)) writeFileSync(bak, readFileSync(abs));
  • 读取本地文件
    lib/apply.mjs:157
    if (existsSync(target.abs)) {
  • 写入本地文件
    lib/apply.mjs:168
    mkdirSync(dirname(target.abs), { recursive: true });
  • 写入本地文件
    lib/apply.mjs:169
    writeFileSync(target.abs, content, 'utf-8');
  • 读取本地文件
    lib/apply.mjs:193
    content = readFileSync(abs, 'utf-8');
  • 写入本地文件
    lib/apply.mjs:208
    writeFileSync(abs, next, 'utf-8');
  • 读取本地文件
    lib/glob.mjs:65
    entries = readdirSync(dir, { withFileTypes: true });
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-skill
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

每条问题给具体改法,不是一句「请整改」

README

由 DeepSeek 最新模型翻译生成
@deepwhale-cn/dsh-remediation Listed on dsh-plugin.org 检查报告只说「哪有问题」,改法还得自己查 —— 这个插件把「改成什么样、大概多久、改完怎么验」直接给出来。 关键词:整改建议 · 修复建议 · 漏洞修复 · 合规整改 · 怎么改 · 整改清单 · 修复方案 · 改前改后 · 检查报告解读 · 一键整改 不装会怎样 你跑完一轮检查,拿到一份几十条的 JSON 报告:LOG-RETENTION-SHORT、FIN-AUTH-PLAINTEXT、 MED-EMR-RETENTION-1……每条都有一句「请整改」。然后呢? - 改到什么值才算合规?日志留存写 90 天还是 180 天? - 这条规则对应的是哪个文件、哪一行?改配置还是改代码? - 这条要写文档,模板长什么样? - 改完了怎么确认真的改掉了,而不是「看着像改了」? - 哪些能直接机械改,哪些必须业务决策? 这些事现在都得自己一条条查法条、翻代码、问同事。dsh-remediation 就是把这个空档补上:它不新增任何判据,只读你已有的检查报告,把每条问题翻译成能照着做的改法——具体步骤、改前 → 改后片段、预计工时、改完重跑哪条命令。
展开完整文档(README 剩余 1 节)
@deepwhale-cn/dsh-remediation

Listed on dsh-plugin.org

检查报告只说「哪有问题」,改法还得自己查 —— 这个插件把「改成什么样、大概多久、改完怎么验」直接给出来。

关键词:整改建议 · 修复建议 · 漏洞修复 · 合规整改 · 怎么改 · 整改清单 · 修复方案 · 改前改后 · 检查报告解读 · 一键整改

不装会怎样

你跑完一轮检查,拿到一份几十条的 JSON 报告:LOG-RETENTION-SHORT、FIN-AUTH-PLAINTEXT、 MED-EMR-RETENTION-1……每条都有一句「请整改」。然后呢?

- 改到什么值才算合规?日志留存写 90 天还是 180 天?
- 这条规则对应的是哪个文件、哪一行?改配置还是改代码?
- 这条要写文档,模板长什么样?
- 改完了怎么确认真的改掉了,而不是「看着像改了」?
- 哪些能直接机械改,哪些必须业务决策?

这些事现在都得自己一条条查法条、翻代码、问同事。dsh-remediation 就是把这个空档补上:它不新增任何判据,只读你已有的检查报告,把每条问题翻译成能照着做的改法——具体步骤、改前 → 改后片段、预计工时、改完重跑哪条命令。
对声明过 autoApply 的规则(如 LICENSE、日志留存天数),还能机械改掉:默认 dry-run,确认后 --apply 才落盘,先备份、只碰声明过的文件。

dsh-cn-log-retention / dsh-industry-medical / ... = 查【哪有问题】
dsh-remediation = 告诉你【到底怎么改、改完怎么验】
dsh-fix-verify = 复核【改前 → 改后】问题少了没有

先说清楚它是什么、不是什么

是:

- 一个「检查报告 → 整改清单」的转换器:输入任意 guard 插件的 --json 报告,输出按严重度排序的整改清单;
- 每条命中尽量配:问题(title + ruleId + 文件:行)、依据(source)、具体改法(步骤 / 改前改后片段)、预计工时、改完怎么验(重跑哪条命令、哪个 ruleId 应消失);
- 一份可交付的 Markdown 整改清单(--out),能直接放进整改报告附件;
- 对 recipe 里声明了 autoApply 的规则,提供有边界的机械修改:默认 dry-run 只打印「将改什么」,--apply 才写盘。

不是:

- ❌ 不是扫描器 —— 它没有 rules/,不新增判据;问题从报告来,验证靠重跑原插件;
- ❌ 不替你判断违规 —— 报告和建议都是提示确认,不是安全结论、合规结论或违规判定;
- ❌ 不保证「照做就合规」 —— 改法给的是常见落地路径,具体条款适用、业务取舍仍需人工确认;
- ❌ 不乱改文件 —— 只处理 recipe 里声明过的 autoApply,未声明的文件一个字节都不碰;
- ❌ 不编假改法 —— 没有 recipe 的规则会明说「本条暂无专用改法」,回引原报告 advice,并提示 --list-recipes。

安装与使用

通常随深鲸守护插件一起安装;单独装:
dsh plugin --profile web add @deepwhale-cn/dsh-remediation

1) 跑任意守护插件,拿 JSON 报告 dsh-cn-log-retention --root ./my-project --json > report.json 也可以用一键体检的总报告 dsh-guard-suite --json > report.json

2) 生成整改清单(默认只打印,不改文件) dsh-remediation --input report.json --root ./my-project

3) 另存可交付的 Markdown dsh-remediation --input report.json --root ./my-project --out ./整改材料/

4) 先看哪些能机械改(dry-run),确认后再落盘 dsh-remediation --input report.json --root ./my-project dsh-remediation --input report.json --root ./my-project --apply

5) 列出已覆盖的规则 id 与一句话改法 dsh-remediation --list-recipes

6) JSON 输出(给 CI / 二次处理) dsh-remediation --input report.json --root ./my-project --json

--rules-from <目录> 可以追加自己的 recipe 目录(目录下放 .json,可重复指定)。

输出长什么样

深鲸守护 · 整改建议 v0.1.0 ────────────────────────────────────────────────────────────── 输入 report.json 项目 /path/to/my-project 命中 5 条(高 3 · 中 2) · 有专用改法 4 条 · 暂无专用改法 1 条自动修改 3 条可机械修改 · dry-run(文件未改动)

【高】3 条

1. 🔴 日志留存期短于法定 6 个月规则 LOG-RETENTION-SHORT · logger.js:2 依据 《中华人民共和国网络安全法》第二十一条第(三)项 —— 网络日志不少于六个月现状 maxDays: 7 改法
1) 确认命中的是合规日志留存配置,不是排障用的短期轮转 —— 两者要分开配置。
2) 把留存天数改为 ≥180 天(6 个月按 180 天算)。
...
改前 → 改后(yaml)
- retentionDays: 30
retentionDays: 180 # 网络安全法:网络日志不少于 6 个月工时 5 分钟验证 重跑 dsh-cn-log-retention --root <项目>,LOG-RETENTION-SHORT 应消失自动修改 ⏳ 可机械修改(dry-run):将改写 1 个文件(1 处);加 --apply 才落盘

没有 recipe 的规则长这样(不会编一个假改法):

改法 本条暂无专用改法。
原报告建议:<该 finding 的 advice 原文> 可用 --list-recipes 查看已覆盖的规则;这条需要按上面的建议人工判断。
工时 待评估(暂无专用改法)验证 按原报告建议人工处理后,重跑原命令,确认 XXX 不再出现

autoApply 的安全边界

| 边界 | 行为 |
| 默认模式 | dry-run:只计算「会改哪个文件、改哪一行」,不写盘 |
| 落盘条件 | 必须显式 --apply |
| 备份 | 写盘前先备份为 <file>.bak-<YYYYmmdd-HHMMSS>;同一文件一次运行只留一份原始备份 |
| 修改范围 | 只处理 recipe 里声明的 autoApply:newFile 只创建声明路径,setValue 只改 glob 命中的文件 |
| 路径约束 | 所有目标必须落在 --root 之内,越界直接拒绝 |
| 已存在文件 | newFile 遇到同名文件不覆盖 |
| 找不到匹配 | setValue 的 pattern 匹配不到时不臆造修改,明确报告「未找到可改写的位置」 |
| 不做的事 | 不改未声明文件、不执行任意脚本、不联网、不删除文件 |

两种 autoApply: json {"type": "newFile", "path": "LICENSE", "template": "mit"} json {"type": "setValue", "glob": "/.{yml,yaml,json,env,conf,properties}", "pattern": "((?:retentionDays|maxDays)\\s[:=]\\s[\"']?)(\\d{1,3})", "after": "180"}

setValue 的约定:pattern 最后一个捕获组是要被替换的值;after 是替换后的文本。
这样 retentionDays: 30 会变成 retentionDays: 180,而 key 保持原样。

recipes:已覆盖的规则(42 条)

recipe 是本插件唯一的资产:每条规则一份,写清改法、工时、验证命令,可选声明 autoApply。
--list-recipes 可以随时查看当前版本覆盖了哪些规则。

行业/地方 high 规则(15 条,全覆盖)

| 插件 | 规则 |
| 医疗 | MED-EMR-RETENTION-1 MED-EMR-RETENTION-2 MED-EMR-AUDIT-TRAIL-1 MED-EMR-AUDIT-TRAIL-2 MED-PRESCRIPTION-RETENTION |
| 教育 | EDU-APP-FILING-PUBLIC EDU-SCORE-RANK-PUBLIC EDU-AD-GAME-SDK EDU-STUDENT-ID-EXPOSURE |
| 金融 | FIN-PAY-SENSITIVE-RETENTION FIN-AUTH-PLAINTEXT FIN-AMC-10Y FIN-CLIENT-LOCAL-STORE |
| 地方 | LR-SZ-26 LR-SZ-73 |

高频通用规则(27 条)

LOG-RETENTION-SHORT LOG-DISABLED LOG-SENSITIVE FILING-NO-ICP FILING-NO-APP
FILING-NO-PRIVACY-ENTRY FILING-NO-OPERATOR LIC-SELF-FILE ENV-NOT-IGNORED
SBOM-NO-LIST DEP-NO-LOCKFILE CI-WRITE-ALL CI-UNPINNED-ACTION CONSENT-PRECHECKED
MLPS-DEFAULT-CRED CRYPTO-WEAK-HASH PII-IDCARD RIGHTS-NO-DELETE INCIDENT-NO-PLAN
CLASSIFY-NO-POLICY LIFE-NO-RETENTION-POLICY PIPIA-NO-RECORD EDU-APP-FILING-RECORD
MED-DEVICE-CYBER-POLICY MED-HGR-ETHICS-CONSENT-2 LR-SZ-79 LR-SZ-80

其中声明了 autoApply 的有 16 条:LICENSE 等缺文件类会创建最小模板,日志留存天数 / 日志级别 / 收银留存期 / CI 权限等配置值类会做定点替换。

没覆盖的规则不是「不重要」,而是还没有可以机械套用的改法。
清单会明说「本条暂无专用改法」并回引原报告 advice,绝不会编造步骤。

退出码

| 码 | 含义 |
| 0 | 正常(包含 dry-run、apply 成功、--list-recipes、--help) |
| 2 | 输入缺失 / JSON 坏了 / 缺 findings[] / --root 不存在 / 参数错误 / recipe 损坏 |

自动修改执行失败(如目标路径越界)会在输出里明确标出,但不改变退出码 2 的语义——输入本身没问题、清单仍然可用。

与现有插件不重叠在哪

- 30 多个检查插件负责发现问题;本插件负责把问题变成改法,不新增任何判据;
- dsh-guard-suite 负责聚合全套检查;本插件消费它的报告,但不重复扫描;
- dsh-fix-verify 负责复核改前/改后同一套规则的结果;本插件负责告诉你怎么改,改完仍建议用 dsh-fix-verify 复核;
- dsh-compliance-doc 负责交付文档;本插件的 --out 整改清单.md 可以作为它的输入素材。

免责声明本插件输出的是整改建议与提示确认,不构成安全结论、合规结论或违规判定。
改法基于常见工程实践与报告中的 source 依据整理,具体条款适用、业务取舍、上线变更仍需人工确认。
未命中的规则不代表项目没有问题;改完请重跑对应检查插件验证。

开发与测试 bash bash tests/run.sh # 65 条真断言:清单内容 / dry-run 不改文件 / apply 备份与落盘 / 坏输入 exit 2 / 端到端改掉真实 finding

端到端那条最硬:复制 dsh-cn-log-retention 的正例样本 → 真插件报 LOG-RETENTION-SHORT → dsh-remediation --apply → 重跑同一插件,断言该 finding 消失。

License

MIT

深鲸网安守护系列(共 39 个)

一个插件做一件事。安全问题是链式的 —— 配套用才完整。

国内合规(12)| 等保对照 · 日志留存 · 备案公示 · 用户同意 · 个人信息权利 · 未成年人保护 · 影响评估 · 数据分类分级 · 算法备案 · 数据出境 · 国密合规 · AI 内容标识

AI 与 Agent 治理(6)| AI 输出信任 · 外部内容信任 · MCP 安全 · Agent 权限 · 策略核对 · 可疑指令

数据与凭据(5)| 敏感数据 · 密钥轮换 · 数据留存 · 配置审计 · 密钥扫描

供应链与构建(5)| 开源许可 · 依赖投毒 · CI 安全 · 工具审查 · 物料清单

权限与应急(3)| 最小权限 · 告警外发 · 应急证据包

行业专项(4)| 医疗行业专项 · 教育行业专项 · 金融行业专项 · 地方数据条例

编排与交付(4)| 一键体检 · 改前改后复核 · 合规可交付文档 · 整改建议

都在 DSH 插件市场(dsh-plugin.org)、npm 和 deepwhale.org.cn/guard.html 上。
预览分享卡片长什么样 ↓feely0208/dsh-remediation
分享 · DeepSeek Harness Hub
feely0208/dsh-remediation

把检查报告逐条转成可照做的改法与验证命令

回到顶部