- RESTful APIID restful_api版本 1.0.4插件制作者 beku免费304 行 / 7.5 KB路由 / 后台页提供 RESTful API 接口以输出列表和帖子的 JSON 数据供第三方客户端APP调用app/plugins/restful_api/plugin.php开发日志已有 1 条
个人独立维护项目。
主楼 插件质量报告
插件:
restful_apiHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
未检测到插件数据表声明。
接口文档如下,之前的帖子,https://bbs1.org/topic/406 ,我再把注释加上
Index API:/index.php?a=api_index
[ { "own": "张三", //楼主 "lasttime": "1700000000", //最后回复时间 "reply": 0, //回复楼层数 "title": "标题1", //帖子标题 "postid": "123", //帖子postid "tag": 1, //分类标签 "perm": 0, //权限 "img": "1.png", //用户头像 "pintop": 0 //是否置顶 }, { "own": "李四", "lasttime": "1700000000", "reply": 9, "title": "标题2", "postid": "124", "tag": 1, "perm": 0, "img": "2.png", "pintop": 0 } ]View API:/index.php?a=api_view&id=1
id为index api返回的postid
可设置伪静态:/view/1[ { "id": 1, //楼层id "user": "张三", //用户name "img": "2.png", //用户头像 "op": true, //是否为楼主 "post": "帖子内容", //内容 "post_time": 1700000000, //发帖时间 "tag": 1, //当前tag "postid": "111" //帖子id }, { "id": 2, "user": "李四", "img": "2.png", "op": false, "post": "回复", "post_time": 1700000000, "tag": 0, "postid": "1234" } ]最后编辑于 2026-08-12 17:24🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
存在一处严重越权泄露问题,需立即处理后再对外使用。
🔒 安全问题
plugin.php:29-89的列表/主题/回帖查询未做任何版块可见性过滤(forum_group_allowed/allow_view_groups),plugin.php:91-184两个路由无需登录即可输出数据,受限版块(成员/内部版)的主题标题、正文、回帖、用户名与头像可被匿名拉取,绕过核心在index.php中对版块可见性的强制校验。请查询时 JOIN 版块并过滤当前用户可见版块,或对受限内容要求登录并逐条校验权限。plugin.php:9未配置时默认启用,安装即公开 API。建议默认关闭,由站长显式开启。plugin.php:18返回Cache-Control: public, max-age=60,受限内容可能被共享缓存 60 秒,权限变更后仍会短暂泄露旧数据。建议改为private, no-store。
⚡ 性能问题
未发现明显问题。查询为单条 JOIN + LIMIT,无循环查询。
🐛 功能/规范缺陷
plugin.php:237description 含“RESTful API/JSON/第三方客户端”等技术实现描述,建议改为用户可感知的功能描述。plugin.php:130-184读取主题未递增view_count,与核心浏览统计行为不一致,可补充或说明。
✅ 修复优先级
最高优先级修复 #1(版块权限越权泄露)与 #2(默认关闭);其次调整缓存头 #3;最后清理 description 与浏览统计。
🔍 复核报告(v1.0.4,回应此前审查)· @beku
✅ 已确认修复
- 越权泄露受限版块内容——已修复。新增 api_can_view_forum()(plugin.php:29-47),经 forum_by_id() 取版块后调用 forum_group_allowed($forum, 'allow_view_groups')(44),与核心 index.php:857/2913 同口径。列表循环逐条过滤(141 continue),详情页命中受限版块返回 err('无权限', 403)(196-197)。匿名 me()=null → gid=0,受限版块不再外泄。
- Cache-Control public——已修复(基本)。18 行由 public, max-age=60 改为 private, max-age=10,共享缓存泄露已消除。
❌ 未生效 / 新问题
- 默认启用——未修复。plugin.php:9 'enabled' => !isset($raw['enabled']) || (int)$raw['enabled'] === 1:未配置时 !isset() 恒为真,安装即默认公开,仍与「默认关闭」建议相悖。
- description 技术名词——未修复。plugin.php:295 仍含「RESTful API / JSON / 第三方客户端」,违反规则(description 只写用户可感知收益)。
- view_count 未递增——未修复。api_view_page()(180-239)整段未调用 mark_viewed()/UPDATE app_topics SET view_count=view_count+1,与核心 index.php:1113/2915-2917 不一致。
💡 顺带建议
- 18 行仍有 max-age=10,含敏感内容的受限接口建议 no-store。
- 129 行 $max_scan=1000:受限版块密集时可能扫描 1000 条仍凑不满 index_limit,属功能边界,可改为按需翻页或 JOIN 版块一次性过滤。
- 297-299 路由名 api_index/api_view 无插件前缀,理论存在跨插件冲突风险。
- 118 行 err('API 未启用', 404) 语义上更宜 403。
总结:最严重的越权泄露与共享缓存已修复,权限模型正确;但「默认启用」「description 技术名词」「view_count」三处未生效,建议一并收尾后升版本。
🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件未被 8/18 楼上 350 的报告覆盖,属独立首次审查)
插件:RESTful API(restful_api)v1.0.4
结论:已完成命名规范、生命周期(install/uninstall 幂等)、数据库跨库兼容、红区 Hook 零 DB 读、Hook 真实性(含核心与跨插件依赖核对)、SQL 注入风险、CSRF/权限校验、CSS 变量规范等项审查,未发现安全、性能或功能性问题。