dsh-industry-education:教育 App 仓库里的七条静态合规检查

前言

教育类家校通、作业通知、成绩查询一类 App,功能上线前常被问的不是「模块是否齐全」,而是备案号在哪公示、班级排行榜能否公开、依赖里为何出现广告 SDK、适龄范围是否写明、测试数据里是否出现学籍号明文、儿童个人信息保护负责人是谁。这些问题多数能在代码、配置和文档里找到线索或缺口,但人工逐项翻仓库成本高,也容易漏项。

工信部 APP/ICP 备案有专门插件可查公示;教育移动应用备案(教APP备)、备案信息表、成绩排名展示、广告 SDK、适龄提示、学籍号与儿童个人信息保护负责人,则属于教育行业那几条「硬杠杠」。@deepwhale-cn/dsh-industry-education(GitHub:feely0208/dsh-industry-education)由维护者 feely0208 发布,归类为 admin-security,在 DSH 生态里做教育行业专项静态检查:只扫仓库内的代码、配置、文档与依赖清单,本地运行、不上传内容,命中时提示确认并附法条与证据说明,不下「合规 / 不合规」结论。

这是什么、不是什么

下面先划清边界,避免误用。

是:教育行业专项静态检查器,共 7 条判据,每条可对应官方条款;只读仓库文件,本地执行;命中表示「哪里像、哪里缺、请确认」,不是终审。

不是:合规认证或「保证过检」;不读数据库、不登录 App、不判断线上是否实际展示榜单;监护人同意、青少年模式等归 dsh-minor-guard;工信部 APP/ICP 备案公示归 dsh-cn-filing——本插件查的是教育移动应用备案与备案信息表。条款是否适用于高校、职教、成人培训,需法务确认。

一句话:dsh-cn-filing 看「有没有 APP 备案」,本插件看「教育行业那几条硬杠杠」。

七条检查规则

每条规则带 when 条件:项目不具备对应行业特征时进入 notApplicable,既不报错也不假装已查。例如纯后端、无移动端入口时,不会误报「未公示教APP备号」;未出现中小学生等信号时,适龄提示规则不跑。

规则 ID 查什么 级别
EDU-APP-FILING-PUBLIC 关于页、i18n、前端资源、app.json、Info.plist 等中是否找不到 教APP备NNNNNNN号 形式 high
EDU-APP-FILING-RECORD 是否找不到教育移动应用备案信息表(如 docs/compliance/教育移动应用备案信息.md) medium
EDU-SCORE-RANK-PUBLIC 代码/前端是否出现成绩排名、名次榜单、/score/rank、高考喜报/升学率等 high
EDU-AD-GAME-SDK 依赖清单是否出现 AdMob、play-services-ads、广点通、mobads、BUAdSDK、Unity、Cocos2d 等 high
EDU-AGE-RANGE-NOTICE 面向未成年人场景下,app.json、Manifest、Info.plist、关于页等是否缺少适龄/ageRating medium
EDU-STUDENT-ID-EXPOSURE 是否出现 G/L + 18 位的学籍号格式 high
EDU-CHILD-PI-OFFICER 文档/配置是否找不到儿童个人信息保护负责人及联系方式(或 child_pi_officer / dpo_contact) medium

依据分别对应教技厅〔2019〕3号、教育部令第50号、教技函〔2019〕55号、教基一〔2013〕7号、网信办令第4号等条款;完整出处可用 CLI 的 --list-rules 查看。

读结果时注意:EDU-SCORE-RANK-PUBLIC 里 rank 可能只是变量名;EDU-AD-GAME-SDK 仅命中依赖名不直接判违规;EDU-STUDENT-ID-EXPOSURE 为格式命中,需区分真实学籍号与占位;第 1、5、7 条 absence 类规则整组只报一次。有 high 命中时进程退出码为 1,便于 CI 卡口。

安装与启用

推荐从市场或 GitHub 经 DSH 安装:

dsh plugin --profile web add @deepwhale-cn/dsh-industry-education

也可仅作为 npm 开发依赖安装,自行接入组合层:

npm i -D @deepwhale-cn/dsh-industry-education

在 DSH 组合层中插入:

- insert:
    - id: industry-education
      name: '@deepwhale-cn/dsh-industry-education'

package.json 标明引擎要求:DSH >=0.1.0-rc.6 <0.3.0,Node >=18。当前包版本为 0.1.1,许可证 MIT。插件以当前 DSH 进程权限读取项目文件,安装前请自行核对源码与许可证。

典型用法

在项目根目录或指定目录执行扫描:

dsh-industry-education                    # 扫当前目录
dsh-industry-education --root <项目目录>   # 扫指定项目
dsh-industry-education --demo             # 内置样本,查看检出效果
dsh-industry-education --json             # JSON 输出,供 CI 二次处理
dsh-industry-education --html report.html # 生成 HTML 报告
dsh-industry-education --list-rules       # 列出判据与出处
dsh-industry-education --quiet            # 只输出结论行

建议流程:先做 --demo 熟悉报告形态,再对真实仓库跑全量扫描;CI 中可用 --json 与退出码处理 high 命中。报告会说明扫描文件数、实际运行的规则数;若少于 7 条,表示部分规则因 when 不适用而未执行,不等于「全绿」。

适用场景与限制

适合:教育类移动应用或含教育信号的前端/混合仓库,在提测或上线前做仓库侧自查;与 dsh-cn-filing、dsh-minor-guard、dsh-data-scan 等分工配合,不替代法务意见。

已知限制(来自官方 README):不判断线上事实;文档里写「不面向未成年人」也可能被关键词 when 命中;默认跳过 dist/、build/、node_modules/ 等,.gradle 不读内容,广告 SDK 主要靠 package.json / Podfile / podspec;学籍号命中可能展示号码片段,保存报告时请自行打码。

结尾

dsh-industry-education 把教育 App 上线前常被问的七类静态问题做成可本地复现的规则扫描,适合开发者在改代码与改文档的环节提前对齐备案公示、备案表、排名展示、广告依赖、适龄提示、学籍号与儿童个人信息保护负责人等事项。

目录页:https://www.skillhub.cn/plugins/feely0208/dsh-industry-education
源码与说明:https://github.com/feely0208/dsh-industry-education

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye