Choose a model for the work you need to doMe
← All case studies

别把插件清单当安全证书:六步做一份能对账的本地CSV

Article content is shown in its original language.

本次核验了固定提交下的13,267条Radar记录,完成字段检查、仓库去重、CSV导出与回读。验证对象是数据流程,不是插件安装、安全审计或新版DSH兼容性。

下载清单容易,解释清单需要证据

插件目录里的“ok”能帮你 缩小检索范围,却不能保证最新版本可用,更不能代替权限审查。本篇把DSH Plugin Radar的公开JSON变成一份能回读、能对账的CSV,解决的是选型前的数据整理问题,不执行任何插件代码。

需求来自项目自己的接口说明 :公开记录可用于下游工具,但每条记录尚未给出完整的插件提交、测试时间、版本与日志。我们因此固定来源提交,核对字段与统计,再把“记录状态”与“我实际验证过的功能”分开。

本次实测在macOS与项目 Python环境完成;固定输入SHA-256、完整提交、脚本及输出保存于包内。处理与回读耗时0.1075秒,脚本无付费API成本;这不包含前置研究、网络下载和人工检查的时间。

验证到CSV最终输出为止 。Excel中的显示、插件安装与Profile重启均未测试,也不以其他操作的终端画面证明本次过程。

开始之前:目标、前提与验收标准

目标是得到result/p lugins.csv及result/acceptance.json。验收要求为:输入和CSV都含13,267条记录,仓库标识集合一致,verdict统计一致;坏JSON、缺verdict、重复仓库三项反例被拒绝。数据状态只能按项目口径解释。

需要Python 3.12 及以上、终端、网络下载工具curl和一个新建工作目录。脚本使用标准库,不要求DSH账号、API Key、Docker、Kubernetes或管理员权限;不要在现有生产目录运行或覆盖自己的表格。

本包tools/audit _radar_snapshot.py是本次核验脚本,输入样本在test_input/plugins-all.json。脚本不联网、不安装依赖、不读取Profile;只读指定输入,在指定输出目录写CSV和验收报告。运行前可打开源码检查这些边界。

第三方描述字段可能含电子表 格公式。脚本对以等号、加号、减号和@开头的值加文本前缀,降低CSV打开时执行公式的风险。因此它保留的是仓库集合与统计,不承诺每个描述字符与原JSON逐字相同。

第一步:建立隔离目录并固定来源

在终端创建一个新目录 :mkdir radar-check-20261010,然后cd radar-check-20261010。把稿件包的tools目录复制到这个目录。不要把项目自己的虚拟环境或真实账号文件一起复制。

本次来源提交是c4321f 15b7b83a13d7aa73615fd2163f042539b4。执行curl --fail --location --max-time 30 'https://raw.githubusercontent.com/AdamPlatin123/dsh-plugin-radar/c4321f15b7b83a13d7aa73615fd2163f042539b4/data/plugins-all.json' --output plugins-all.json。命令返回只是下载完成,还没有证明数据可用。

预期中间结果是当前目录出现 plugins-all.json。若网络不可用,可以使用包内同名固定样本,并记录它是本次保存的快照;不能把失败后下载到的错误页面改名为JSON继续运行。

第二步:核对文件身份与数据日期

macOS执行shasum -a 256 plugins-all.json。本次固定样本的结果为4da4552f3565ac12fb49bfa4e3789023bdb02df7cc34d22142d792924fd4e447。不同结果时停止,不用“内容差不多”作为继续条件;先核对提交和下载文件。

Windows可用Powe rShell的Get-FileHash -Algorithm SHA256 ./plugins-all.json核对同一摘要。哈希只说明文件与本次样本一致,不证明作者测试结论为真;新快照需要新记录,不能沿用今天的验收数字。

本次JSON的schema 为dsh-radar/v1,generated_at为2026-10-09T23:15:47Z,即北京时间10月10日07:15:47。它是数据生成时间,不是每一款插件的测试时间。

第三步:运行字段与仓库检查

执行python3 too ls/audit_radar_snapshot.py --input plugins-all.json --output result。脚本检查plugins是非空数组,每条包含repo、name、verdict、stars、desc,仓库名符合owner/repo形式,stars为非负整数。

仓库标识转小写、去掉末尾斜 杠后参与重复检查。发现重复时脚本拒绝输入,不自行保留某一条,因为冲突条目的状态需要回到上游判定。安装更多包或提高权限不会修复数据冲突。

预期终端输出包含passe d: true、input_rows: 13267与csv_rows: 13267。若报missing required field或invalid canonical repo,保存行号与输入摘要,检查是否换了上游schema,不通过修改计数让结果变绿。

第四步:打开结果,核对四档合计

脚本生成UTF-8带BOM 的CSV,可供电子表格导入。统计应为ok 8,216、incompatible 3,117、pending 1,900、untested 34,四档合计13,267。这里的英文状态是上游字段,不是本篇新的审计评级。

先在文本编辑器查看CSV表 头,再打开acceptance.json。报告应含input_sha256、csv_sha256、verdict_counts与generated_at。文件存在不是验收,数目、集合与状态统计都要匹配。

本次脚本写完CSV后 ,用csv.DictReader读回文件,比较记录数、仓库集合与verdict分布。三个检查通过,才证明导出没有丢行或改坏分类;本篇没有测试Excel某个版本的筛选界面。

第五步:看反例报告,确认失败会被阻止

验收文件failure_t ests中,broken_json、missing_verdict、duplicate_repo三项应为rejected: true。坏JSON抛解析错误,缺字段提示位置,重复仓库提示标识;这些输出来自本次真实运行。

若某个反例不再被拒绝 ,不应在生产目录更新数据;先固定脚本版本并查变更。另一个风险是CSV被外部编辑器修改,输入摘要仍相同却输出摘要变化。应再执行一次脚本,而不是沿用旧报告证明新文件。

脚本不覆盖上游 ,不修改Profile,也不删除旧目录。恢复办法是保留原文件,另建输出目录再运行;不要对包含私人文件的目录执行递归清理,以免把数据排错变成数据丢失。

第六步:从数据筛选走向单项验证

CSV可以按需求和状态筛选 候选,但进入安装前仍需回原仓库核对固定版本、许可证、Bundle、网络目标、文件路径、命令执行和卸载方式。ok记录缺少逐条证据时,标为待复核,而不是“已审计”。

本次没有安装插件 ,没有重启一次性Profile,没有验收插件最终任务输出。数据方法可以复现,插件可用性不能据此声明;想升级到运行验证,需在隔离Profile完成安装、重启、任务验收与精确回滚并保存日志。

下游长期接入还要补超时、有 限重试、缓存与schema变化检测。今天的固定样本验证不了明天每次刷新都成功;只有新数据通过同样检查,才应替换旧缓存,并向使用者显示数据日期。

把一万多条记录变成可核对表 格,收益是减少重复整理和误读状态,不是得到一万多张安全证书。让数字有来源,让输出有回读,让未知保持未知,才是这个小工具能节省的工作。


原稿日期:2026-10-10。

Copyright removal requests

This article shares an AI use case. Rights to the original text and materials belong to their authors. Contact us to request removal of infringing content.

Contact email:jadename.zhou@gmail.com
Explore moreOther case studiescase studies →