Repository navigation
安全与稳定性集中修复版本。
2.8.6..2.8.7共 19 次提交(含 3 次合并提交)、67 个文件变更(+3601 / -1894)。本轮代码审计确认 2 个严重级、11 个高危级、21 个中危级、11 个低危级问题,已完成修复或加固;口令存储升级为加盐 bcrypt,与全部安全修复一致地不做向后兼容。升级前请先阅读文末「升级注意」。
安全修复
- 修复安装器可被任意访客重装并接管站点:仅在「无
config/install.lock且管理员口令仍为出厂默认」时允许安装,并禁止再以出厂默认口令完成安装 - 修复文件管理器越权写 WebShell(#285):根目录收敛到图片存储目录,扩展名对齐主配置图片白名单,关闭在线编辑/打包下载/远程拉取并补鉴权闸
- 修复认证凭据可重放(#285):登录态由
authCookie 改为服务端 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 校验
升级注意(重点)
- 旧的加密删除链接与源图保护链接全部失效:
urlHash()不做向后兼容。 - 登录态迁移到服务端 Session,升级后所有会话需重新登录。
- 最低 PHP 版本提升至 7.4,PHP 5.6 ~ 7.3 站点须先升级 PHP。
config/config.php需补'token_suffix_ID'=>1,否则旧配置缺失该键会触发Undefined array key。- 口令存储升级为加盐 bcrypt,不向后兼容:升级后旧版 SHA256 存储的管理员与上传者口令全部失效,必须重置。推荐恢复路径:用发行包内
config/config.php覆盖当前文件(口令回到出厂默认)→ 以出厂默认口令登录后台 → 立即改为自定义强口令(8~64 位)。 - 文件管理器能力收敛(在线编辑/打包下载/远程拉取均关闭);
.htaccess仅对 Apache 生效,Nginx/Caddy 需按docs/安全配置.md配等价规则。
Full Changelog: 2.8.6...2.8.7
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

