• NB
    NB头像生成
    ID nb_avatar版本 2.2.0插件制作者 NB免费2302 行 / 154.8 KBHook / 路由 / 后台页
    统一使用 NB 生成头像,支持会员选择候选头像,管理员可批量接管、修复或重新生成会员头像。
    app/plugins/nb_avatar/plugin.php
    开发日志已有 2 条

    个人独立维护项目。

    • 侠客
      侠客
      版本 2.2.0 da2a93eb9360 更新:个人设置直接接管原生头像选择器,只显示 48 个 NB头像,系统头像不可再选。 删除 credits 页面及相关入口。 后台增加使用规则、批量扫描、异常修复、单会员接管和重新生成。 增加损坏头像、缺失/非法变体文件的自动修复。 增加服务端查询长度校验,收紧头像预览脚本选择器。 重建 BBS1 插件 CSS/JS 资源。release
    • 侠客
      侠客
      版本 2.1.1 6bc56b4b3ee6 更新:灵感源自:https://github.com/wave-charts/avatar-gen 内置到插件,注册时启用项目生成一张随机图给用户作为头像,风格与 ns 默认头像应该是一致的。
    主楼
  • 质量报告

    插件质量报告

    插件:nb_avatar

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    avatar.url头像 URL 生成是4读 修正❗️---
    user.after_save用户注册/资料保存后否3读写app_usersapp_users-
    user.before_save用户注册/资料保存前否3读---
    avatar.picker用户资料头像选择器否2读---
    content.before_delete内容删除操作回调内2读写 修正❗️---
    site.closed_allow站点关闭访问豁免检查否2----
    admin.tabs后台管理页标签栏(展示位置:后台Tab)否1----

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

    数据字典

    未检测到插件数据表声明。

    #1
  • NB

    灵感源自:https://github.com/wave-charts/avatar-gen
    内置到插件,注册时启用项目生成一张随机图给用户作为头像,风格与 ns 默认头像应该是一致的。

    #2
  • bbs1org

    看起来不错

    #3
  • 350

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

    🔒 安全问题

    未发现明显问题。鉴权/CSRF:nb_avatar_action(plugin.php:1863-1888) need_login+require_post;nb_avatar_admin_action(1890-1906) need_admin+require_post;均经核心 check() 的 _csrf 校验,只操作 uid(),无 IDOR。头像路由 nb_avatar_avatar(1777-1818):v 限 ^[0-9a-f]{20}$ 且 hash_equals 文件 SHA256 前 20 位(1781-1794);落盘解密校验 magic/nonce/secretbox(1312-1326);响应头 CSP sandbox+nosniff+X-Frame-Options DENY(1803-1808)。路径不可穿越:目录/文件名由 int uid 经 sha256+2 位分片生成(1281-1295)。SVG 白名单消毒(1478-1499)、颜色校验(1454)、禁外部引用;动态输出全部 h()。site.closed_allow 仅放行 nb_avatar_avatar(1820-1823),范围合理。小瑕疵:content.before_delete(1853-1861) 在核心 tx() 内删文件,unlink 失败会连带回滚用户删除(index.php:2571-2585)。

    ⚡ 性能问题

    • 注册同步生成头像(1833):每次约 10 次 DOM 解析+gzdecode+sodium+落盘,拖慢注册。
    • avatar.url 每次渲染首调 hash_file 全文件取版本(1328-1350),请求内缓存但无跨请求缓存,多用户列表页重复读文件;无 DB 查询/N+1。
    • backfill 限量 50/批、游标单查询无 N+1(46、1623-1626),但单次 POST 同步生成 50 个(1642)可能超时。

    🐛 功能/规范缺陷

    • 标记碰撞:marker_seed 仅 dylan 的 1..48(1352-1360),核心把空 style/seed 归一化为 dylan+uid 派生 seed(index.php:1745-1746),故「标记」对所有默认用户恒真,仅靠文件存在区分,脆弱。
    • 覆盖自选头像:backfill(1620-1660)与注册(1829-1837)只查文件(1637),不查已有 avatar_style/seed,mark_user(1592-1596)会把自选像素风等改成 dylan+标记。
    • 跨插件 function_exists('avatar_upload_profile_html')(1910) 依赖另一插件,违反「插件间不互相调用」。
    • 76 个素材以 base64+gzip var_export 内联(1167-1248),无再生成脚本,上游更新维护成本高。
    • 删除/卸载只清文件,遗留空分片目录(1712-1721)。

    (授权完整:MIT 全文 5-27、CC BY 4.0 署名+链接 29-33、commit 35、credits 路由 1925-1932、SVG metadata 1543;前缀/两参签名/assets/description/version 均合规。)

    ✅ 修复优先级

    P1:生成/补生成前检查已有自选头像,避免覆盖(1620-1660、1829-1837);改用不可碰撞标记。P2:注册改懒生成/队列(1833);版本改 mtime+size 或 sidecar 缓存(1339)。P3:移除跨插件 function_exists 守卫(1910);补素材再生成脚本;按需调小 backfill 批次。

    #4
  • rainbow

    点下载显示插件版本未识别

    #5
  • bbs1org

    这个属于内核问题。后续优化

    #6
  • NB

    个人设置直接接管原生头像选择器,只显示 48 个 NB头像,系统头像不可再选。
    删除 credits 页面及相关入口。
    后台增加使用规则、批量扫描、异常修复、单会员接管和重新生成。
    增加损坏头像、缺失/非法变体文件的自动修复。
    增加服务端查询长度校验,收紧头像预览脚本选择器。
    重建 BBS1 插件 CSS/JS 资源。

    #7
  • idc

    @侠客 无法下载无法安装,插件代码id与市场id不一致

    最后由 idc 编辑于 2026-08-19 18:12
    #8
  • NB

    这得问问老大了,我是直接后台分享的 @bbs1org

    #9
  • bbs1org

    系统插件市场有点问题。下周修复

    #10
  • 399

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

    插件:NB头像生成(nb_avatar)v2.2.0

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

    #11

发表回复

登录后回复