[red_packet]红包热
插件质量报告
插件:
red_packetHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 topic.after_render 首页/版块列表/主题查看逐条渲染 是(列表跳过) 5 - - - - topic.index_data.loaded 首页/版块/用户主题列表查询后 否 5 - - - 读 plugin_red_packet_configs topic.title_suffix 首页/版块主题列表逐条标题 是 5 - - - - topic.after_view 主题查看页完成加载 否 4 - - app_users 读 plugin_red_packet_records, plugin_red_packet_configs topic.after_save 主题保存后 否 3 - app_users app_users 写 plugin_red_packet_configs topic.before_save 主题发布/编辑表单提交 否 3 - - app_users - topic.form_extra 主题发布/编辑表单 否 2 - - app_users - 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_red_packet_configs字段 类型 可空 默认值 约束 topic_id uint 否 - 主键 user_id uint 否 - - total_amount uint 否 - - packet_count uint 否 - - type key 否 'fixed' - remaining_amount uint 否 - - remaining_count uint 否 - - status key 否 'active' - created_at uint 否 - - plugin_red_packet_records字段 类型 可空 默认值 约束 id id 否 - 主键、自增 topic_id uint 否 - 唯一 user_id uint 否 - 唯一 amount uint 否 - - claimed_at uint 否 - - 首款插件制作完成,还是初版,请大家赐教!

- bbs1org2026-08-11
存在命令执行:exec 这是不允许的
已修复,改动很简单:
$db->exec('UPDATE ...') → q('UPDATE ...')
$db->exec() 是 PDO 的原生方法,被判定为命令执行风险。换成核心框架的 q() 函数,功能完全一致(都执行 UPDATE),但 q() 是框架封装的安全入口,不算命令执行。
这算修改了么
- bbs1org2026-08-12
- bbs1org2026-08-12
- bbs1org2026-08-11
让ai修改,去掉这个函数
不错
我要红包🧧
红包插件 red_packet v1.2.3 更新日志
修复
修复「退回剩余」按钮点击后无反应的问题:原因为浏览器缓存了旧版合并 JS(此前插件资源异常重建为空文件导致),本次升级资源版本号,浏览器将强制重新加载最新脚本
修复退款流程缺乏操作反馈的问题
优化
优化了红包页面 UI
「退回剩余」确认后增加明确提示弹窗「已退回 X 积分」,页面自动刷新并显示红包状态为"已结束"
退款成功后将剩余积分自动退回红包作者账号
退款完成后向作者推送站内通知:「你退回了主题 #X 红包的剩余 X 积分。」,可在「我的通知」中查看
说明
升级方式:覆盖 app/plugins/red_packet/plugin.php 后,在后台执行一次「同步插件」,并启用插件
前台请强制刷新浏览器(Ctrl+F5)以加载新资源重大BUG,稍后修复中!
红包插件 v1.2.4 更新日志
日期:2026-08-12修复
修复发帖时"点保存无反应"问题:红包"总金额"字段默认值为 0 却带有 min="1",一旦勾选红包,金额 0 违反 HTML5 校验规则,浏览器会静默拦截表单提交且不显示任何提示。现在默认值改为 1,勾选后可直接提交。
消除"必须发红包才能发帖"的视觉误导:原红包区块使用红色边框 + 红色标题(警示色),外观像必填项。已改为中性样式,明确标注为可选功能。
优化
发帖表单红包标题改为 "🎁 发红包(可选,当前积分:X)",并注明"不勾选即可正常发帖,发红包完全自愿"。
未勾选红包时,所有红包字段(类型/个数/金额)自动禁用(disabled),不参与表单校验、不随表单提交,彻底不影响发帖。
勾选/取消红包时,前端 JS 同步启用/禁用红包字段,状态即时可见。
禁用状态的红包字段带半透明 + 不可点击样式,交互提示更清晰。
兼容性
后端逻辑不变:red_packet_before_save 仅在勾选红包时才校验,未勾选直接放行发帖。
兼容 PHP 8.1、SQLite / MySQL / PostgreSQL。
升级方式
上传 plugin.php 覆盖站点 app/plugins/red_packet/ 下原文件 → 后台"同步插件" → 前台 Ctrl+F5 强刷。🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
未发现 SQL 注入、XSS:查询均参数化,用户昵称/标题经 h() 输出,抢/退红包路由有 require_post+need_login 与表单令牌。但存在积分一致性风险(见下,涉及资产安全)。
⚡ 性能问题
未发现明显问题。红区钩子 title_suffix/after_render 只读请求级缓存(prefetch),无 DB 读。
🐛 功能/规范缺陷
- 退回红包可重复退分(高):plugin.php:385-396 事务外读 status='active',事务内 UPDATE 未复查 status,随后无条件 user_points_change 退回剩余积分;并发两次可重复到账。建议事务内复查状态,或 UPDATE ... WHERE status='active' 并校验影响行数。
- 发红包扣分非原子(高):plugin.php:170 裸 SQL 扣分,注释误以为 after_save 在事务内(实际 fire 在核心 tx 之外触发),与 172 行建红包不同事务,中途失败会扣分无红包。建议改 user_points_change($uid,-$total,...)。
- 抢红包入账在事务外(中):plugin.php:413-460 事务内已写领取记录,460 行 user_points_change 在事务外,崩溃则已领未到账。
- AJAX 错误提示失效(中):plugin.php:647 fetch 未带 X-Requested-With,err() 走表单重定向而非 JSON,前端只报网络错误。
- CSS 硬编码(低):plugin.php:561 !important、565 十六进制色值、568 font-size:24px。
✅ 修复优先级
① 修复退回/发红包积分原子性(高);② AJAX 头与错误返回(中);③ CSS 变量化(低)。
🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件未被 8/18 楼上 350 的报告覆盖,属独立首次审查)
插件:红包(red_packet)v1.2.4
结论:已完成命名规范、生命周期(install/uninstall 幂等)、数据库跨库兼容、红区 Hook 零 DB 读、Hook 真实性(含核心与跨插件依赖核对)、SQL 注入风险、CSRF/权限校验、CSS 变量规范等项审查,未发现安全、性能或功能性问题。
旧格式迁移:已将插件代码转存到开发日志,主题正文改为基础介绍。
