• bbs1org
    附件上传
    ID attachment_upload版本 1.1.7插件制作者 bbs1org免费533 行 / 44.6 KBHook / 路由 / 后台页
    支持在主题和回帖中上传图片与文件,并可按后缀限制上传类型。
    app/plugins/attachment_upload/plugin.php
    开发日志已有 7 条

    个人独立维护项目。

    • bbs1org
      bbs1org
      版本 1.1.7 67418ebabd50 更新:支持粘贴图片上传release
    • bbs1org
      bbs1org
      版本 1.1.4 963114dd73fa 更新:优化按钮位置
    • bbs1org
      bbs1org
      版本 1.0.15 29df7bd829f6 更新:增加五级信任等级体系权限设置支持
    • bbs1org
      bbs1org
      版本 1.0.14 ebdd5656fd4c 更新:提升版本号
    • bbs1org
      bbs1org
      版本 1.0.13 5e6b7583e5f9 更新:优化细节
    • bbs1org
      bbs1org
      版本 1.0.13 56c20712b850 更新:增加预览
    • bbs1org
      bbs1org
      版本 1.0.12 63f4c707a201 更新:增加文件后缀白名单设置。多个后缀以逗号分隔,留空不限制;前端选择器过滤且服务端强制校验
    主楼
  • 质量报告

    插件质量报告

    插件:attachment_upload

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    reply.after_save回帖保存后否3----
    topic.after_save主题保存后否3----
    topic.before_save主题发布/编辑表单提交回调内(文件批处理)3读写app_attachmentsapp_users, app_attachments-
    attachment.uploader主题/回帖编辑表单附件控件否2----
    reply.form_extra回帖编辑表单否2----
    request.csrf_exempt请求 CSRF 豁免检查否2----

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

    数据字典

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

    #1
  • 等风来

    这个附件要是能设置允许的格式就好

    #2
  • bbs1org

    版本 1.0.12 更新:
    增加文件后缀白名单设置。多个后缀以逗号分隔,留空不限制;前端选择器过滤且服务端强制校验

    #3
  • 秦始黄

    增加一个用户组限制呗 限定用户组可使用

    #4
  • bbs1org

    可以

    #5
  • nodebuy

    这个问题修复一下:fileinfo要是安装不了,粘贴图片一直有问题,加下面的代码,兼容代码
    // 服务器没装 fileinfo 扩展时(上面两个函数都由它提供),用 getimagesize 兜底。
    $info = @getimagesize($path);

    #6
  • 350

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

    🔒 安全问题

    • 【高】SVG 文件以 .svg 后缀落盘并被 Web 直出,存在存储型 XSS 风险。plugin.php:127 白名单含 svg,plugin.php:138 的 return $ext . (attachment_upload_allowed_ext($ext) ? '' : '1'); 使 svg 保留原后缀,最终存为 app/upload/<hash前2位>/<hash>.svg;而图片走 plugin.php:63-65 的 asset_url('app/upload/…') 直出(plugin.php:224),说明 upload 目录可被浏览器直接访问。攻击者上传内嵌 <script> 的 SVG 即可在站内同源执行脚本。建议:svg 不保留原后缀(强制 .svg1)或移出白名单,附件统一走 download 路由并加 X-Content-Type-Options: nosniff 与 attachment 处置。
    • 【中】plugin.php:307-310 在 ajax_request() 时豁免 attachment_upload 上传接口的 CSRF 校验,只依赖可伪造的 X-Requested-With 头;前端 plugin.php:374 本已携带 _csrf 却未校验。建议移除豁免,走核心默认 CSRF 校验。

    ⚡ 性能问题

    未发现明显问题。

    🐛 功能/规范缺陷

    • plugin.php:190 自定义 Hook attachment.before_upload 未加插件前缀,易与核心或其他插件冲突,建议改为 attachment_upload.before_upload。
    • plugin.php:303 Cookie 名 __attachment_upload_history_clear 未加插件前缀,建议改为 bbs1_attachment_upload_history_clear。

    ✅ 修复优先级

    1. 修 SVG 后缀直出(高);2. 撤销 CSRF 豁免(中);3. 补 Hook 与 Cookie 前缀(低)。
    #7
  • bbc

    “app/upload”里如果有“孤儿文件”是怎么处理的?

    #8
  • bbs1org

    通过占用空间大小设置来阻止用户垃圾文件的上传。

    #9
  • bbc

    不是这个,就是用户在发消息并上传了附件,后来用户删除了该消息,然后附件里的文件好像没有被删除,而且也没有被引用过从而成为了“孤儿”,这样的文件还躺在“app/upload”我觉得有点浪费,好像没有个安全接口管理它,还有问了ai说附件文件也不太建议保存在数据库里

    #10
  • bbs1org

    目前是有这个问题。默认存储是廉价的。附件存储在本地文件的

    #11
  • Pei

    f26a0d886fbd66a25ed248cb8baf707b.jpg

    #12
  • 399

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

    插件:attachment_upload v1.0.12

    🔒 安全问题
    未发现明显问题。上传文件按内容检测 MIME 类型(非仅信任后缀),非图片类型统一中性化扩展名存盘;下载走独立路由并设置 nosniff,未见路径穿越。

    ⚡ 性能问题
    未发现明显问题。

    🐛 功能/规范缺陷
    私有 Hook 未加插件前缀:本插件在上传流程 attachment_upload_markdown()(plugin.php 约190行)内自行定义并调用了扩展点 attachment.before_upload,供其它插件(如 user_review)在上传前做权限拦截,但该私有 Hook 未按规则加上自身插件 ID 前缀。规则要求私有 Hook 以插件 ID 开头,此处属于该情形。

    (附带说明:8/18 楼上 350 的报告曾在审查 user_review 插件时,误将 attachment.before_upload 判定为"核心不存在的无效 Hook",已在 user_review 主题帖的复核回帖中更正——该 Hook 实际由本插件定义,两插件同时启用时功能有效。)

    ✅ 修复优先级
    低优先级规范项:建议将 attachment.before_upload 更名为带前缀的私有 Hook 名称(如 attachment_upload.before_upload),并同步更新监听方(如 user_review)的注册。

    #13
  • bbs1org

    版本 1.0.13 更新:
    环境检测(图片直接显示模式)

    #14
  • bbs1org

    版本 1.0.13 更新:
    增加预览

    #15
  • dew556

    希望增加权限管理、希望增加webp转换(节省服务器压力)

    #16
  • bbs1org

    用户组空间大小可以设置

    #17
  • bbs1org

    版本 1.0.13 更新:
    优化细节

    #18
  • bbs1org

    版本 1.0.14 更新:
    提升版本号

    #19
  • bbs1org

    版本 1.0.15 更新:
    增加五级信任等级体系权限设置支持

    #20
  • bbs1org

    版本 1.1.4 更新:
    优化按钮位置

    #21
  • bbs1org

    版本 1.1.7 更新:
    支持粘贴图片上传

    #22

发表回复

登录后回复