- 电子竹知了ID game_center_zhuzhiliao版本 1.3.0插件制作者 mingmeo免费882 行 / 32.4 KBHook / 后台页传统玩具竹知了,按住画圈甩起来!全速摇加分,有瑕疵扣分app/plugins/game_center_zhuzhiliao/plugin.php开发日志已有 2 条
此项目接受所有登录用户协助维护和提交更新。
主楼 插件质量报告
插件:
game_center_zhuzhiliaoHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 game_center.register 非系统hook 否 1 - - - - 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_zhuzhiliao_play_log字段 类型 可空 默认值 约束 id id 否 - 主键、自增 user_id uint 否 - - played_at uint 否 - - - bbs1org2026-08-14
- bbs1org2026-08-14
okay
是消耗1积分,不是+1积分
你这稳赚啊
- bbs1org2026-08-14
- bbs1org2026-08-14
- bbs1org2026-08-14
🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
- 【严重】积分结算信任客户端数据,存在刷分漏洞:
play()直接用客户端提交的bet当作圈数(plugin.php:578、587 仅min(1000)),派彩按圈数×每圈基础分计算(638 行),每次只扣 1 分成本(36 行cost=1),净赚为payout−cost(639 行)。攻击者可绕过前端直接 POSTbet=1000,单次约净赚 199 积分且可无限重复,属无限刷分。建议改为服务端可验证的结算依据,或对圈数严格封顶并配合频率限制,确保净收益受控。
⚡ 性能问题
未发现明显问题。
🐛 功能/规范缺陷
- 逐圈计分完全失效:579-581 行读取的
avg_rps/roundness/round_data在游戏中心核心调用中并未传入(只传 user_id/cost/bet/game),于是 593-601 行恒走兜底rps=0、roundness=1,609-636 行的速度档位与瑕疵惩罚永不生效。建议把这些数据合并进bet(JSON)提交并服务端校验。 - 内联脚本与全局变量:97-104 行内联输出
<script>,542 行暴露window.__zhuzhiliao,均未用完整插件 ID 前缀,建议改 assets +data-*注入并加game_center_zhuzhiliao_前缀。 - HTML id 仅用
zhuzhiliao-前缀(60-87 行),建议统一game-center-zhuzhiliao-*。 - CSS 存在写死颜色/圆角/阴影(719-835 行),建议改用
var(--inverse)、var(--radius)、var(--shadow-base)等变量。
✅ 修复优先级
- 修复积分刷分(严重)→ 2. 修复逐圈计分失效 → 3. 脚本/命名规范整改。
- 【严重】积分结算信任客户端数据,存在刷分漏洞:
350是307?不是233?
🔍 复核报告(v1.3.0,回应此前审查)· @banming
✅ 已确认修复
- 内联脚本与全局变量已清理:render() 不再输出 <script>,配置经 data-config 属性注入(plugin.php:107-113),JS 移入 assets 且不再暴露 window.__zhuzhiliao(plugin.php:436 IIFE)——正确。
- HTML id 前缀已统一为 game-center-zhuzhiliao-*(plugin.php:70-107)——正确。
- 缓解措施已加:bet 上限 1000→50(plugin.php:145-146),payout 封顶 100(plugin.php:215),新增 60 秒 3 次限频(plugin.php:154-157)。
❌ 未生效 / 新问题
- 【刷分仍在】结算仍完全信任客户端数据。核心 game_center.php:121-126 调用 play() 只传 user_id/cost/bet/game,POST 的 avg_rps/roundness/round_data 被丢弃(game_center.php:105 只取 bet),于是 plugin.php:148-150 恒读到 0/1/'',178-182 恒走兜底 rps=0.1/roundness=1,速度档位与瑕疵惩罚(plugin.php:189-213)永不生效——上一轮「逐圈计分失效」未真正修复。
- 攻击者直接 POST bet=50 得 payout=50×0.2=10、净赚 9 分/局(plugin.php:215-217),限频下仍约 27 分/分钟,可无限重复。建议改服务端结算(服务端生成结果),或将 rps/roundness 合入 bet(JSON) 并让核心透传、服务端校验。
- plugin.php:101 {$message} 未 h() 转义(当前仅服务端拼装数字文本暂未触发,建议 h($message))。
💡 顺带建议
JS 用匿名 IIFE(plugin.php:436),规则要求具名 IIFE;CSS 仍有写死:box-shadow rgba(0,0,0,.06)(374)、background rgba(0,0,0,.5)(387,应用 --backdrop)、border-radius:20px(390)、空值 color:(391)。
总结:命名/脚本/上限已修,但结算信任客户端数据的刷分与逐圈计分失效仍在,插件不干净。
补充一点:v1.3.0 的「刷分」修复其实还没有真正堵住,根源在核心
game_center.php而不是这个插件本身。game_center.php:105只从$_POST取了bet,game_center.php:121-125调call_user_func($game['play'], ...)时传给游戏插件的$ctx只有user_id / cost / bet / game四个键,avg_rps、roundness、round_data这几个字段整个请求周期里从未被核心读取、也没有转发给play()。所以
game_center_zhuzhiliao.php:148-150里$avg_rps = (float)($ctx['avg_rps'] ?? 0); $roundness = (float)($ctx['roundness'] ?? 1); $round_data_raw = (string)($ctx['round_data'] ?? '');这三行永远读到默认值(0 / 1 / 空字符串),
round_data_raw恒为空 →plugin.php:159-176的校验分支永远走不到,直接落到plugin.php:178-182的兜底:每一圈都按rps=max(0.1, 0)=0.1、roundness=1计算,也就是恒定拿最低速度档位、零瑕疵惩罚的分数,跟前端摇得多快、转得多圆完全无关。按代码推算(未在站上实际刷分,纯读代码算账):直接对
/game_center提交game_id=game_center_zhuzhiliao&bet=50(不带avg_rps/roundness/round_data),当前points_per_round默认 0.2,50 圈 × 0.2 = 10 分,扣 1 成本,净赚 9 分;限频是 60 秒 3 次,理论上限约 27 分/分钟,可以脚本无限循环刷,不需要真的会玩这个游戏。想要真正修好,两个方向选一个:
- 让核心
game_center_handle_play()(game_center.php:113-126)把$_POST里除了bet之外的字段也整体转发给play()(比如统一传$_POST或者约定一个extra键),这样插件才能拿到逐圈数据; - 或者插件自己把
avg_rps/roundness/round_data打包进bet一起提交(比如bet直接是一段 JSON),因为bet是唯一确定会被透传的字段。
第 2 种改法插件自己就能做,不用等核心更新,可能更快。
- 让核心
- 82026-08-31
不知道问题,页面是卡住的,卸载重装也是一样! - zaiwai2026-09-09
与29楼同样的问题。不能摇了,改成按钮点了。谷歌浏览器,其他浏览器应该也一样。





