Skip to content

EasyImage2.0 简单图床 ver:2.8.7

Latest

Choose a tag to compare

@icret icret released this 27 Oct 16:26

安全与稳定性集中修复版本。2.8.6..2.8.7 共 19 次提交(含 3 次合并提交)、67 个文件变更(+3601 / -1894)。本轮代码审计确认 2 个严重级、11 个高危级、21 个中危级、11 个低危级问题,已完成修复或加固;口令存储升级为加盐 bcrypt,与全部安全修复一致地不做向后兼容。升级前请先阅读文末「升级注意」。

安全修复

  • 修复安装器可被任意访客重装并接管站点:仅在「无 config/install.lock 且管理员口令仍为出厂默认」时允许安装,并禁止再以出厂默认口令完成安装
  • 修复文件管理器越权写 WebShell(#285):根目录收敛到图片存储目录,扩展名对齐主配置图片白名单,关闭在线编辑/打包下载/远程拉取并补鉴权闸
  • 修复认证凭据可重放(#285):登录态由 auth Cookie 改为服务端 Session + session_regenerate_id()
  • 修复登录日志泄露可重放凭据(#285):不再记录口令或其 SHA256 摘要
  • 修复未授权路径穿越导致任意文件读取(CWE-22,#286):新增统一收敛函数 resolve_image_path() / is_within_storage(),thumb/down/info/hide/del/compressing/list/admin.inc 全部复用
  • 修复任意文件删除(#283):能力令牌 urlHash() 重做为 HKDF-SHA256 + 随机 IV + AES-256-GCM 认证加密 + base64url,del/hide 域隔离
  • 修复 SVG 存储型 XSS:扩展名统一转小写,新增 is_safe_svg() 拒绝各类载荷,SVG 直访追加 Content-Security-Policy: sandbox
  • 修复上传日志/后台日志查看/统计页等多处存储型 XSS、任意文件包含与任意目录删除
  • 新增服务端上传扩展名白名单、后台 CSRF 防护、源图保护随机 Key、基础安全响应头(nosniff/SAMEORIGIN/Referrer-Policy)
  • 修复 X-Forwarded-For/Client-IP 伪造绕过 IP 黑白名单与游客每日限额,新增 trusted_proxy 配置项
  • 修复 TinyFileManager 远程 URL 上传导致的 SSRF
  • 口令存储升级为加盐 bcrypt(cost 12),不向后兼容:落盘由无盐 SHA256(明文) 改为 bcrypt(SHA256(明文)),升级后存量 SHA256 口令失效需重置

功能新增

  • 新增 API 上传文件名 Token ID 后缀开关 token_suffix_ID(#241)
  • 后台 Token API 管理界面重构:调用地址与现有 Token 列表合并展示,增/改 Token 独立分区
  • 鉴黄判定在 Sexy、Porn 之外增加 Hentai 维度(#271)

Bug 修复

  • 修复 IP 黑/白名单形同虚设(裸 Elvis 表达式、正则定界符冲突、空名单匹配空串等)
  • 修复 API Token 校验松散比较、privateToken() 非 CSPRNG、getdirnum() 计数恒为 0
  • 修复大文件分片上传合并落错目录、GLOB_BRACE 在非 GNU 系统致命错误、会话有效期过短
  • 修复删除结果谎报成功、缩略图/后端压缩、统计与缓存、广场与详情页 DoS、公开查询 API、CORS/预检等一系列问题

性能优化

  • 「广场」文件计数、getFileNumber()、版本检查、出厂默认口令 bcrypt 判定均改为缓存化/迭代器实现,避免每请求全目录递归扫描

兼容性调整

  • 最低 PHP 版本由 5.6/7.0 提升至 7.4,官方支持范围 7.4 ~ 8.4
  • PHP 8.5 兼容、PHP 8.1+ null 参数 Deprecated 全面收口
  • 口令存储格式变更(config.php 的 password 由 SHA256 串变为 $2y$12$... bcrypt)

依赖更新

  • ip2region 升级至 v3.17.0(数据截至 2026-07-09)、ECharts 5.4.1 → 6.1.0
  • TinyFileManager 静态资源统一 Bootstrap 4.6.2;文档站 CDN 切至 fastly.jsdelivr.net 并补 SRI 校验

升级注意(重点)

  1. 旧的加密删除链接与源图保护链接全部失效:urlHash() 不做向后兼容。
  2. 登录态迁移到服务端 Session,升级后所有会话需重新登录。
  3. 最低 PHP 版本提升至 7.4,PHP 5.6 ~ 7.3 站点须先升级 PHP。
  4. config/config.php 需补 'token_suffix_ID'=>1,否则旧配置缺失该键会触发 Undefined array key。
  5. 口令存储升级为加盐 bcrypt,不向后兼容:升级后旧版 SHA256 存储的管理员与上传者口令全部失效,必须重置。推荐恢复路径:用发行包内 config/config.php 覆盖当前文件(口令回到出厂默认)→ 以出厂默认口令登录后台 → 立即改为自定义强口令(8~64 位)。
  6. 文件管理器能力收敛(在线编辑/打包下载/远程拉取均关闭);.htaccess 仅对 Apache 生效,Nginx/Caddy 需按 docs/安全配置.md 配等价规则。

Full Changelog: 2.8.6...2.8.7

wechat alipay


2.8.7 重发补充(2026-10-28)

本次为撤回原 2.8.7 后的重发,tag 2.8.7 前移以包含以下修复:

  • 管理员/上传者账号统一要求 ASCII 字母开头(1~64 位,仅字母/数字与 ._-),根治纯数字名被 arrayeval 落成 int 导致「登录成功即掉线」(#252)
  • 首页上传端点与页脚/图片详情/广场/上传日志/后台回收·待审/文件管理/缩略图共 13 处硬编码站点根绝对链接改为以 $config['domain'] 为前缀,修复二级目录/反向代理子路径部署 404(#146、#193);根目录部署行为不变,子目录/反代部署请把后台「网站域名」填为含子目录的完整基址(末尾不加 /)
  • 修复页头「首页」链接在 domain 为空时渲染为 href="" 不跳转
  • 文档同步:update.md、常见问题.md、常见状态代码.md