• 秦始黄
    本地头像
    ID avatar_upload版本 1.4.4插件制作者 秦始黄免费492 行 / 26.1 KBHook / 路由 / 后台页
    允许用户上传并裁切自己的头像,统一预置头像风格,积分消耗可在明细中查看。
    app/plugins/avatar_upload/plugin.php
    开发日志已有 2 条

    个人独立维护项目。

    • 秦始黄
      秦始黄
      版本 1.4.4 523b6d76d169 更新:优化数据库查询和性能release
    • 秦始黄
      秦始黄
      版本 1.4.4 9639b359203a 更新:已修复 1. 修正无效删除 Hook 消除 app.boot 全表扫描 复核积分扣减 复核 SQLite 并发 更新插件信息
    主楼
  • 质量报告

    插件质量报告

    插件:avatar_upload

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    app.boot全站请求启动回调内5读--写 plugin_avatar_uploads, plugin_avatar_upload_changes, plugin_avatar_upload_rates 修正❗️
    avatar.url头像 URL 生成是4读 修正❗️---
    profile.after_form个人资料编辑表单否3读--读 plugin_avatar_upload_changes
    user.before_save用户注册/资料保存前否3----
    avatar.picker用户资料头像选择器否2----
    content.before_delete内容删除操作否2读写---

    颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。

    数据字典

    plugin_avatar_uploads

    字段类型可空默认值约束
    user_iduint否-主键
    versionuint否--

    plugin_avatar_upload_changes

    字段类型可空默认值约束
    user_iduint否-主键
    last_changed_atuint否0-

    plugin_avatar_upload_rates

    字段类型可空默认值约束
    rate_keykey否-主键
    hit_countuint否0-
    window_started_atuint否0-
    updated_atuint否0-
    #1
  • bbs1org

    你那个sb网站,MySQL 查询数太多了。估计插件没注意效率。让ai改进下,说:优化插件性能,避免循环查询,减轻数据库压力。

    #3
  • x

    好的,我自己搞了一个,不给力,马上去下载你的~

    #4
  • 秦始黄

    @x 你要的头像上传插件 分享了

    #2
  • 秦始黄

    好的 好的 谢谢提醒

    #5
  • bbs1org

    是的。这就是插件的最大问题。就怕只实现功能,不注意效率。安装的越多,服务器就崩了。

    #7
  • 秦始黄

    抽奖和发卡插件是重灾区 哈哈

    #6
  • bbs1org

    @秦始黄 循环里面读本地头像文件,对服务器压力太大,需要优化

    #8
  • 秦始黄

    收到 我让AI优化

    #9
  • 秦始黄

    优化了性能 设置了上传时间限制 和积分消耗规则 以免被滥用

    #10
  • 350

    🔍 插件审查报告(对照《AI 开发规则》与开发者文档)

    🔒 安全问题

    未发现刷分:成本由服务端读取并钳制(plugin.php:93-96),事务内二次校验余额后扣减(plugin.php:119-133),不信任客户端;头像经 getimagesize 校验 200×200 且 mime=image/jpeg(plugin.php:271-274),路径由整数 uid + upload_hash_dir() 分片(plugin.php:170-179),无路径穿越;路由 need_login()+require_post()(plugin.php:233-234),JS 附 _csrf。两点提示(非高危):① 直接 UPDATE app_users SET points=points-?(plugin.php:129)绕过核心 user_points_change(),无积分事件与通知,建议改用核心 API;② SQLite 分支不加 FOR UPDATE(plugin.php:122),24h 间隔与扣分存在并发竞态(MySQL/Pg 有锁保护)。

    ⚡ 性能问题

    每请求重复开销:app.boot 钩子(plugin.php:55-59)无条件调用 avatar_upload_versions(),其执行 SELECT user_id,version FROM plugin_avatar_uploads 全表扫描(plugin.php:140);而 app.boot 每个请求都触发(index.php:3297),即使该请求(cron、robots.txt 等)根本不渲染任何头像。

    🐛 功能/规范缺陷

    1. 核心 Hook user.avatar_delete 不存在:核心仅 fire 了 avatar.url/avatar.picker/user.before_save/profile.after_form 与 user.after_save,全仓库无任何 user.avatar_delete 调用;该回调(plugin.php:212-224)永不触发,删除用户后本地头像文件成为孤儿(违反规则 18「必须使用核心定义的原始名称」)。
    2. manifest author 为 bbs1org(plugin.php:478),与主题作者 秦始黄 不一致。

    ✅ 修复优先级

    1. user.avatar_delete 改为真实存在的钩子(如 user.before_delete/content.before_delete),否则头像文件无法回收(中)。
    2. app.boot 全表扫描改为惰性/按需加载并缓存(中)。
    3. 积分扣减改走 user_points_change();SQLite 补并发锁(低)。
    #11
  • 秦始黄

    版本 1.4.4 更新:
    已修复

    1. 修正无效删除 Hook

    消除 app.boot 全表扫描
    复核积分扣减
    复核 SQLite 并发
    更新插件信息

    #12
  • 秦始黄

    版本 1.4.4 更新:
    优化数据库查询和性能

    #13
  • mixfix

    完全免费吗

    #14
  • 399

    🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件未被 8/18 楼上 350 的报告覆盖,属独立首次审查)

    插件:本地头像(avatar_upload)v1.4.4

    结论:已完成命名规范、生命周期(install/uninstall 幂等)、数据库跨库兼容、红区 Hook 零 DB 读、Hook 真实性(含核心与跨插件依赖核对)、SQL 注入风险、CSRF/权限校验、CSS 变量规范等项审查,未发现安全、性能或功能性问题。

    #15

发表回复

登录后回复