2026-06-06 附件上传与下载路径安全加固
本次保留附件付费下载业务规则,只针对附件文件安全、路径安全和图片上传校验做加固。
主要改动:
- 附件文件名和物理路径二次校验
- 文件:model/attach.func.php
- 新增
attach_safe_filename(),只允许形如 YYYYMM/uid_random.ext 或 YYYYMMDD/uid_random.ext 的附件路径。
- 新增
attach_path(),统一生成附件物理路径,拒绝空路径、绝对路径、../、./、双斜杠等异常路径。
- 附件删除、按帖子删除、按用户删除统一改用
attach_path(),避免数据库异常文件名导致误删非附件目录文件。
- 附件下载路径加固
- 文件:route/attach.php
- 下载时使用
attach_path() 解析物理文件。
- 对异常附件文件名直接返回附件不存在。
- 保留原有登录、版块下载权限、付费附件扣费逻辑。
- 下载响应头中的原始文件名移除换行和双引号,降低响应头注入风险。
- 头像和封面上传真实图片校验
- 文件:model/attach.func.php
- 新增
attach_validate_image_data(),基于 getimagesizefromstring() 校验图片内容。
- 文件:route/my.php
- 用户头像和封面上传保存前增加服务端真实图片校验。
- 禁止 SVG 内容,避免脚本型图片风险。
- 附件落盘规则收紧
- 文件:model/attach.func.php
attach_dir_save_rule 只允许 Ym 或 Ymd。
- 从 Session 临时附件迁移到正式附件目录时,校验临时文件名格式和临时文件存在性。
已有防护确认:
- 文件:upload/.htaccess
- 上传目录已有 Apache 侧脚本禁执行规则,会拒绝 PHP、脚本、可执行文件等风险扩展执行或访问。
- 本次未改变附件付费下载规则,只加固绕过和文件路径风险。