4 条)
date: 2026-10-18
category: 审计修复
source: WWW/待办事宜/FlintHub_插件在线审计工具_规则集验收报告.md
FlintHub 插件在线审计工具 —— 规则集验收报告(一期 12 + 二期 8 + 方案 §8 补齐 4 = 24 条)
本报告由
plugin-audit/cli/selftest.php同源逻辑生成,所有数字来自真实运行,无手写。
| 项 | 值 |
|---|---|
| 工具版本 | 1.1.26 |
| 规则集 | mvp-3 |
| 判据基准核心 | 1.1.26 |
| 规则条数 | 24 |
| 自检夹具 | 246 例 / 通过 246 / 失败 0 |
| 语料 | 1373 个文件(60 个插件) |
| 语料耗时 | 13334 ms |
| 语料命中 | 88 条 |
| 停用规则 | 无 |
一、规则清单与自检结果
| 编号 | 等级 | 规则 | 规范 | 夹具 | 结果 |
|---|---|---|---|---|---|
| FH-PKG-001 | CRITICAL | 包结构必须 plugins/<name>/ 单根(含 Plugin.php + plugin.json) | §11.35 ① | 12 | PASS 12/12 |
| FH-PKG-002 | CRITICAL | 插件目录名必须匹配 ^[a-z0-9_]{2,40}$ | §11.35 ③ | 10 | PASS 10/10 |
| FH-PKG-003 | CRITICAL | 包内路径安全(无 .. / 反斜杠 / 盘符 / 空字节 / 全角斜杠 / bidi 控制符) | §11.35 ① / Updater::normalizePath() | 11 | PASS 11/11 |
| FH-SYN-001 | CRITICAL | 包内 PHP 文件必须语法正确(子进程 token_get_all TOKEN_PARSE,带超时) | §11.34 / 发布端门禁 #2 | 7 | PASS 7/7 |
| FH-NS-001 | CRITICAL | 命名空间必须能被插件自动加载器解析(复刻 Autoloader 三条候选路径) | §11.34 | 15 | PASS 15/15 |
| FH-INL-001 | MAJOR | 无内联 <script> / <style> 块(src 引用与 JSON-LD 数据岛豁免) | §7.3-1 / §7.3-6 / §12.2-4 | 14 | PASS 14/14 |
| FH-INL-002 | MAJOR | 无内联 on 事件属性(addEventListener + data- 传参) | §7.3-2 / §12.2-4 | 12 | PASS 12/12 |
| FH-I18N-001 | MAJOR | 三语字典键集合零差异 + 键序一致(token 硬解,不 include) | §八 | 10 | PASS 10/10 |
| FH-USE-001 | MAJOR | 同命名空间下调用未 import 的 app 类(跑到那行才 Class not found) | §12.1-6 | 11 | PASS 11/11 |
| FH-SEC-001 | MAJOR | 红线函数(eval / unserialize / extract / assert / create_function / preg_replace+e) | §一五 | 10 | PASS 10/10 |
| FH-SEC-002 | MAJOR | 写操作必须「先登录后 CSRF」(且 CSRF 不能晚于读参数) | §11.28 | 10 | PASS 10/10 |
| FH-I18N-002 | MAJOR | 代码里字面量引用的语言键必须在字典里存在(缺键会显示裸键名) | §八 | 10 | PASS 10/10 |
| FH-ENC-001 | MINOR | 文本文件编码:0 BOM / 0 CRLF / 全 UTF-8 | §11.5 / 发布端门禁 #3 | 10 | PASS 10/10 |
| FH-ENC-002 | MINOR | PHP 变量名不得含非 ASCII 字节(全角标点会被吞进变量名) | §11.5 / 全角标点 | 10 | PASS 10/10 |
| FH-ENC-003 | MINOR | 无调试残留(var_dump / print_r / console.log / debugger / [DBG]) | §11.5 / 发布端门禁 #4 | 9 | PASS 9/9 |
| FH-INL-003 | MINOR | 无静态 style="" 属性(CSS 变量注入豁免) | §7.3-3 / §7.3-4 / §7.3-5 | 14 | PASS 14/14 |
| FH-META-001 | MINOR | plugin.json 必填字段完整 + hooks 指向真实存在的文件 | §三 | 13 | PASS 13/13 |
| FH-META-002 | MINOR | plugin.json 的 category 必须在核心 10 类内 | §三 | 8 | PASS 8/8 |
| FH-META-003 | MINOR | plugin.json 的 icon 必须在核心图标表内(否则渲染成问号) | §6.4-4 | 7 | PASS 7/7 |
| FH-META-004 | MINOR | hooks 声明的钩子名必须在核心钩子表内(写错就永不触发) | §9.1 | 8 | PASS 8/8 |
| FH-META-005 | MINOR | 版本号多处一致(plugin.json / 说明.md / Plugin.php / assets) | §12.2-7 | 10 | PASS 10/10 |
| FH-DB-001 | INFO | 插件直接查询核心表(跨层依赖,建议确认) | §11.8 | 8 | PASS 8/8 |
| FH-HOOK-001 | INFO | 钩子文件里出现 $this->(闭包作用域下不可用) | §11.24 | 8 | PASS 8/8 |
| FH-HOOK-002 | INFO | 钩子文件里声明顶层函数/类(重复 include 会 Cannot redeclare) | §9.5 | 9 | PASS 9/9 |
二、语料回归(60 个插件 / 1373 个文件)
| 编号 | 命中 | 判定 |
|---|---|---|
| FH-PKG-001 | 2 | 2 条 → 全部为真阳性(逐条见下) |
| FH-PKG-002 | 0 | 零命中(无假阳性) |
| FH-PKG-003 | 0 | 零命中(无假阳性) |
| FH-SYN-001 | 0 | 零命中(无假阳性) |
| FH-NS-001 | 0 | 零命中(无假阳性) |
| FH-INL-001 | 3 | 3 条 → 全部为真阳性(逐条见下) |
| FH-INL-002 | 1 | 1 条 → 全部为真阳性(逐条见下) |
| FH-I18N-001 | 0 | 零命中(无假阳性) |
| FH-USE-001 | 0 | 零命中(无假阳性) |
| FH-SEC-001 | 0 | 零命中(无假阳性) |
| FH-SEC-002 | 0 | 零命中(无假阳性) |
| FH-I18N-002 | 0 | 零命中(无假阳性) |
| FH-ENC-001 | 0 | 零命中(无假阳性) |
| FH-ENC-002 | 0 | 零命中(无假阳性) |
| FH-ENC-003 | 0 | 零命中(无假阳性) |
| FH-INL-003 | 0 | 零命中(无假阳性) |
| FH-META-001 | 0 | 零命中(无假阳性) |
| FH-META-002 | 0 | 零命中(无假阳性) |
| FH-META-003 | 0 | 零命中(无假阳性) |
| FH-META-004 | 0 | 零命中(无假阳性) |
| FH-META-005 | 46 | 46 条 → 全部为真阳性(逐条见下) |
| FH-DB-001 | 36 | 36 条 → 全部为真阳性(逐条见下) |
| FH-HOOK-001 | 0 | 零命中(无假阳性) |
| FH-HOOK-002 | 0 | 零命中(无假阳性) |
命中明细
1. [CRITICAL] FH-PKG-001 — plugins/plugins_cache.json:1
- 症状:文件不在
plugins/<插件目录>/之下(包根多出来的文件)。投稿预检逐条strpos($path, "plugins/<name>/") === 0,这一条会被判err=bad_struct - 修法:
plugins_cache.json是核心运行时自动生成的缓存(含插件与钩子清单),绝不能进包。删掉它 —— 装好后系统会自己重建(或调用Plugin::refresh()) - 原文:
plugins/plugins_cache.json
2. [CRITICAL] FH-PKG-001 — plugins/plugins_cache.json.bak.20260927052409:1
- 症状:文件不在
plugins/<插件目录>/之下(包根多出来的文件)。投稿预检逐条strpos($path, "plugins/<name>/") === 0,这一条会被判err=bad_struct - 修法:
plugins_cache.json是核心运行时自动生成的缓存(含插件与钩子清单),绝不能进包。删掉它 —— 装好后系统会自己重建(或调用Plugin::refresh()) - 原文:
plugins/plugins_cache.json.bak.20260927052409
3. [MAJOR] FH-INL-001 — plugins/forum_required_tag/hook/layout_head_end.php:37
- 症状:用
<script>承载数据的「数据岛」:<script type="application/json" id="frt-badge-map">。§7.3-6 明确要求改成data-*属性承载 JSON —— 这里的内容根本不参与执行,纯粹是被当成了数据容器;而且内联<script>在生产的 CSP 下会被拦(本机不设 CSP,测不出来)(这段 HTML 是 PHP 字符串拼出来的,不在视图文件里) - 修法:改成 data 属性承载:
<div id="xxxData" hidden data-json='<?php echo htmlspecialchars(json_encode($data), ENT_QUOTES, 'UTF-8'); ?>'></div>,plugins/forum_required_tag/assets/script.js启动时JSON.parse(el.dataset.json)读取(§7.3-6) - 原文:
<script type="application/json" id="frt-badge-map">
4. [MAJOR] FH-INL-001 — plugins/icon_generator/views/generator.php:302
- 症状:用
<script>承载数据的「数据岛」:<script type="application/json" id="iconGenData">。§7.3-6 明确要求改成data-*属性承载 JSON —— 这里的内容根本不参与执行,纯粹是被当成了数据容器;而且内联<script>在生产的 CSP 下会被拦(本机不设 CSP,测不出来) - 修法:改成 data 属性承载:
<div id="xxxData" hidden data-json='<?php echo htmlspecialchars(json_encode($data), ENT_QUOTES, 'UTF-8'); ?>'></div>,plugins/icon_generator/assets/script.js启动时JSON.parse(el.dataset.json)读取(§7.3-6) - 原文:
<script type="application/json" id="iconGenData">
5. [MAJOR] FH-INL-002 — plugins/lucky_draw/views/admin.php:100
- 症状:内联事件属性
onsubmit="…"。本站 CSP 不含unsafe-inline→ 生产环境浏览器会拒绝执行(控制台:Refused to execute inline event handler),按钮/表单点了没反应;本机不设 CSP,所以测不出来 - 修法:删掉
onsubmit,在assets/script.js里用document.querySelectorAll('[data-xxx]').forEach(el => el.addEventListener('submit', …))绑定;需要传的数据放data-*属性(单条数据用data-xxx='<?php echo htmlspecialchars(json_encode($row, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS|JSON_HEX_QUOT), ENT_QUOTES, 'UTF-8'); ?>',JS 端JSON.parse读取) - 原文:
onsubmit="…"
6. [MAJOR] FH-INL-001 — plugins/reply_reward/views/admin/index.php:243
- 症状:内联
<script>块:<script>。本站 CSP 的script-src不含unsafe-inline→ 生产环境浏览器会直接拦掉,本机(phpstudy 不设 CSP)却完全正常,属典型的「上线才炸」 - 修法:把逻辑迁到
plugins/reply_reward/assets/script.js,页面只保留<script src="<?php echo $bp; ?>/plugins/reply_reward/assets/script.js?v=<?php echo $ver; ?>"></script>。若需要从 PHP 传数据给 JS,用data-*属性承载 JSON(§7.3-6),script.js里JSON.parse读取 - 原文:
<script>
7. [MINOR] FH-META-005 — plugins/adslot/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:FlintHub | 状态:✅ 已启用
8. [MINOR] FH-META-005 — plugins/ai_assistant/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 适用:FlintHub 社区系统 | 日期:2026-08-26
9. [MINOR] FH-META-005 — plugins/bitiful_storage/Plugin.php:18
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
10. [MINOR] FH-META-005 — plugins/code_audit/Plugin.php:7
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
11. [MINOR] FH-META-005 — plugins/code_repo/Plugin.php:7
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
12. [MINOR] FH-META-005 — plugins/community_bank/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0;assets/script.js 版本注释 = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:FlintHub | 状态:✅ 已启用
13. [MINOR] FH-META-005 — plugins/content_review/说明.md:3
- 症状:版本号与
plugin.json不一致(基准2.1.0):说明.md 版本行 = 2.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
2.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:2.0.0 | 作者:SoSite | 状态:⏸️ 未启用(注册后需后台启用)
14. [MINOR] FH-META-005 — plugins/daily_checkin/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.4.0):说明.md 版本行 = 1.3.0;Plugin.php @version = 1.1.0;assets/admin.css 版本注释 = 1.1.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.4.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.3.0 | 作者:FlintHub | 状态:✅ 启用(ˋplugin.jsonˋ ˋactivated: trueˋ)
15. [MINOR] FH-META-005 — plugins/dice/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:SoSite | 状态:⛔ 未启用
16. [MINOR] FH-META-005 — plugins/draft_saver/Plugin.php:8
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
17. [MINOR] FH-META-005 — plugins/edit_info/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.6.0):说明.md 版本行 = 1.5.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.6.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.5.0 | 作者:SoSite | 状态:✅ 已启用
18. [MINOR] FH-META-005 — plugins/external_link_guard/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 状态:已启用(ˋactivated: trueˋ)| 编制:2026-09-30
19. [MINOR] FH-META-005 — plugins/feidao/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0;assets/style.css 版本注释 = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:FlintHub | 状态:✅ 已启用
20. [MINOR] FH-META-005 — plugins/floor_reply/Plugin.php:7
- 症状:版本号与
plugin.json不一致(基准1.3.1):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.3.1。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
21. [MINOR] FH-META-005 — plugins/friend_links/说明.md:3
- 症状:版本号与
plugin.json不一致(基准2.1.0):说明.md 版本行 = 2.0.0;Plugin.php @version = 1.1.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
2.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:2.0.0 | 作者:SoSite | 状态:✅ 已启用
22. [MINOR] FH-META-005 — plugins/home_members/Plugin.php:21
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0;assets/script.js 版本注释 = 1.0.0;assets/style.css 版本注释 = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
23. [MINOR] FH-META-005 — plugins/hottopics/Plugin.php:29
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
24. [MINOR] FH-META-005 — plugins/leaderboard/Plugin.php:17
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
25. [MINOR] FH-META-005 — plugins/like_points/Plugin.php:23
- 症状:版本号与
plugin.json不一致(基准1.3.0):Plugin.php @version = 1.2.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.3.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.2.0
26. [MINOR] FH-META-005 — plugins/mail_resend/Plugin.php:21
- 症状:版本号与
plugin.json不一致(基准1.0.1):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.0.1。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
27. [MINOR] FH-META-005 — plugins/market_hub/Plugin.php:25
- 症状:版本号与
plugin.json不一致(基准1.2.1):Plugin.php @version = 1.0.0;assets/admin.css 版本注释 = 1.0.3;assets/style.css 版本注释 = 1.0.2。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.2.1。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
28. [MINOR] FH-META-005 — plugins/medal/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:SoSite | 状态:⏸️ 停用(默认未启用)
29. [MINOR] FH-META-005 — plugins/mod_system/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:FlintHub | 状态:⏸️ 停用(默认未启用)
30. [MINOR] FH-META-005 — plugins/mourning_mode/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:FlintHub | 状态:✅ 已启用
31. [MINOR] FH-META-005 — plugins/netdisk_help/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0;assets/style.css 版本注释 = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:FlintHub | 状态:✅ 已启用
32. [MINOR] FH-META-005 — plugins/new_members/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本 1.0.0 | 2026-09-27 | 依据 ˋdocs/插件开发规范.mdˋ
33. [MINOR] FH-META-005 — plugins/notice_center/Plugin.php:22
- 症状:版本号与
plugin.json不一致(基准1.2.0):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.2.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
34. [MINOR] FH-META-005 — plugins/payment_center/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.1):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0;assets/script.js 版本注释 = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.1。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:FlintHub | 状态:✅ 已启用
35. [MINOR] FH-META-005 — plugins/points_mall/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:FlintHub | 状态:✅ 已启用
36. [MINOR] FH-META-005 — plugins/post_favorite/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:SoSite | 状态:⏸️ 停用(默认未启用)
37. [MINOR] FH-META-005 — plugins/post_poll/Plugin.php:18
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0;assets/admin.js 版本注释 = 1.0.0;assets/form.js 版本注释 = 1.0.0;assets/style.css 版本注释 = 1.0.0;等 5 处。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
38. [MINOR] FH-META-005 — plugins/props/Plugin.php:14
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
39. [MINOR] FH-META-005 — plugins/qa/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:FlintHub | 状态:⛔ 未启用
40. [MINOR] FH-META-005 — plugins/red_packet/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.9.0):说明.md 版本行 = 1.8.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.9.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.8.0 | 作者:SoSite | 状态:⏸️ 停用(默认未启用)
41. [MINOR] FH-META-005 — plugins/reply_reward/Plugin.php:16
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0;assets/script.js 版本注释 = 1.0.0;assets/style.css 版本注释 = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
42. [MINOR] FH-META-005 — plugins/seo/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.6.0):说明.md 版本行 = 1.5.0;Plugin.php @version = 1.4.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.6.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.5.0 | 作者:SoSite | 状态:✅ 已启用
43. [MINOR] FH-META-005 — plugins/single_page/Plugin.php:7
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
44. [MINOR] FH-META-005 — plugins/site_stats/说明.md:5
- 症状:版本号与
plugin.json不一致(基准1.3.0):说明.md 版本行 = 1.2.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.3.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
- 插件版本:1.2.0
45. [MINOR] FH-META-005 — plugins/suiyu/Plugin.php:12
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0;assets/script.js 版本注释 = 1.0.0;assets/style.css 版本注释 = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
46. [MINOR] FH-META-005 — plugins/task_center/Plugin.php:7
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
47. [MINOR] FH-META-005 — plugins/third_party_login/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:FlintHub | 状态:⛔ 未启用
48. [MINOR] FH-META-005 — plugins/user_level/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0;Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:FlintHub | 状态:✅ 已启用
49. [MINOR] FH-META-005 — plugins/user_profile/说明.md:3
- 症状:版本号与
plugin.json不一致(基准1.1.0):说明.md 版本行 = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
> 版本:1.0.0 | 作者:SoSite | 状态:✅ 已启用
50. [MINOR] FH-META-005 — plugins/vn_block/Plugin.php:10
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.1。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.1
51. [MINOR] FH-META-005 — plugins/vn_postname/Plugin.php:7
- 症状:版本号与
plugin.json不一致(基准2.1.0):Plugin.php @version = 2.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
2.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 2.0.0
52. [MINOR] FH-META-005 — plugins/xiuxian/Plugin.php:7
- 症状:版本号与
plugin.json不一致(基准1.1.0):Plugin.php @version = 1.0.0。这类不一致不会报错,但升级页按plugin.json提示有新版本、用户升级完看说明还是旧版本号,会以为没升成功 - 修法:把上面各处的版本号统一成
1.1.0。§12.2-7 列出的完整清单是 12 处:plugin.json+说明.md版本行 + 8 个 PHP 文件头@version+ 2 个 assets(本规则只查其中「明确声明插件版本」的那几处,文件级@version不查) - 原文:
* @version 1.0.0
53. [INFO] FH-DB-001 — plugins/ai_assistant/cli/diag_thread.php:34
- 症状:直接查询了核心表:
topic_index、topic。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 34 行的 SQL 字面量
54. [INFO] FH-DB-001 — plugins/bitiful_storage/Plugin.php:481
- 症状:直接查询了核心表:
settings。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 481 行的 SQL 字面量
55. [INFO] FH-DB-001 — plugins/code_repo/Plugin.php:95
- 症状:直接查询了核心表:
settings。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 95 行的 SQL 字面量
56. [INFO] FH-DB-001 — plugins/feidao/Plugin.php:168
- 症状:直接查询了核心表:
users。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 168 行的 SQL 字面量
57. [INFO] FH-DB-001 — plugins/floor_reply/Plugin.php:87
- 症状:直接查询了核心表:
settings。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 87 行的 SQL 字面量
58. [INFO] FH-DB-001 — plugins/home_members/Plugin.php:208
- 症状:直接查询了核心表:
settings、users。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 208 行的 SQL 字面量
59. [INFO] FH-DB-001 — plugins/home_spotlight/Plugin.php:239
- 症状:直接查询了核心表:
settings、topic_index、users。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 239 行的 SQL 字面量
60. [INFO] FH-DB-001 — plugins/leaderboard/Plugin.php:212
- 症状:直接查询了核心表:
users、topic_index、reply_index。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 212 行的 SQL 字面量
61. [INFO] FH-DB-001 — plugins/like_points/AdminController.php:155
- 症状:直接查询了核心表:
users。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 155 行的 SQL 字面量
62. [INFO] FH-DB-001 — plugins/lucky_draw/Plugin.php:112
- 症状:直接查询了核心表:
settings。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 112 行的 SQL 字面量
63. [INFO] FH-DB-001 — plugins/mcp_server/Plugin.php:279
- 症状:直接查询了核心表:
users。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 279 行的 SQL 字面量
64. [INFO] FH-DB-001 — plugins/medal/Plugin.php:309
- 症状:直接查询了核心表:
topic_index、reply_index。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 309 行的 SQL 字面量
65. [INFO] FH-DB-001 — plugins/mobile_api/Controllers/AuthController.php:64
- 症状:直接查询了核心表:
settings。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 64 行的 SQL 字面量
66. [INFO] FH-DB-001 — plugins/mobile_api/MessageRepo.php:34
- 症状:直接查询了核心表:
messages、users。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 34 行的 SQL 字面量
67. [INFO] FH-DB-001 — plugins/mobile_api/Plugin.php:309
- 症状:直接查询了核心表:
users。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 309 行的 SQL 字面量
68. [INFO] FH-DB-001 — plugins/mod_system/AdminController.php:283
- 症状:直接查询了核心表:
topic_index、reply_index、blogs。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 283 行的 SQL 字面量
69. [INFO] FH-DB-001 — plugins/mod_system/FrontController.php:223
- 症状:直接查询了核心表:
topic_index、reply_index、blogs。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 223 行的 SQL 字面量
70. [INFO] FH-DB-001 — plugins/mod_system/Plugin.php:92
- 症状:直接查询了核心表:
settings。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 92 行的 SQL 字面量
71. [INFO] FH-DB-001 — plugins/mourning_mode/Plugin.php:89
- 症状:直接查询了核心表:
settings。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 89 行的 SQL 字面量
72. [INFO] FH-DB-001 — plugins/netdisk_help/AdminController.php:310
- 症状:直接查询了核心表:
points_log。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 310 行的 SQL 字面量
73. [INFO] FH-DB-001 — plugins/netdisk_help/Plugin.php:275
- 症状:直接查询了核心表:
settings、users。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 275 行的 SQL 字面量
74. [INFO] FH-DB-001 — plugins/new_members/Plugin.php:50
- 症状:直接查询了核心表:
users。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 50 行的 SQL 字面量
75. [INFO] FH-DB-001 — plugins/notice_center/Plugin.php:197
- 症状:直接查询了核心表:
settings。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 197 行的 SQL 字面量
76. [INFO] FH-DB-001 — plugins/payment_center/Plugin.php:769
- 症状:直接查询了核心表:
points_log。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 769 行的 SQL 字面量
77. [INFO] FH-DB-001 — plugins/pledge_checkin/Plugin.php:860
- 症状:直接查询了核心表:
users。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 860 行的 SQL 字面量
78. [INFO] FH-DB-001 — plugins/points_mall/AdminController.php:107
- 症状:直接查询了核心表:
user_groups。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 107 行的 SQL 字面量
79. [INFO] FH-DB-001 — plugins/points_mall/Plugin.php:502
- 症状:直接查询了核心表:
user_groups。插件与核心表结构强耦合:核心加字段/改名时插件会静默出错,而且会绕过核心的业务层过滤(软删除、权限、分片),典型症状是「读到已删除/越权的数据」 - 修法:确认这处读取是只读且字段稳定的(如作者名、分类名)。若需要写入或依赖易变字段,优先调用核心提供的公共方法;无论哪种,都要在插件
说明.md里注明「依赖核心表 X 的 Y 字段」,核心改表时才知道要同步检查这个插件 - 原文:
第 502 行的 SQL 字面量