ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ownCloud Core 发布变更日志深度解读:从 10.3 到 11.0 的安全加固、功能演进与运维实战

ownCloud Core 发布变更日志深度解读:从 10.3 到 11.0 的安全加固、功能演进与运维实战 后端内容协同【免费下载链接】core:cloud: ownCloud web server core (Files, DAV, etc.)项目地址https://gitcode.com/gh_mirrors/core84/core点击查看免费下载导读本文以 ownCloud Core 仓库根目录的 CHANGELOG.md 为主体系统梳理该自托管文件同步与共享平台从 10.3.2 到 11.0.0含 unreleased 分支的完整演进脉络。文章聚焦三类读者最关心的信息安全漏洞修复的成因与加固思路、面向管理员的新增配置项与 occ 命令行操作、以及 WebDAV / 文件缓存 / 加密 / 联盟共享等核心子系统在历次版本中的行为变更。读完本文你将能够把变更条目映射到 config/config.sample.php、lib/private/SystemConfig.php 等具体实现文件并据此制定升级、加固与排障方案。一、变更日志的组织方式calens 驱动的发布流水线1.1 文件结构Summary 与 Details 两级体系CHANGELOG.md 的正文按版本倒序排列unreleased 在最前每个版本条目都遵循固定模板Summary一行一条的变更摘要统一格式为类型 - 标题: [#PR/Issue号]Details逐条展开的正文说明问题成因、修复方式与影响面版本标题形如# Changelog for ownCloud Core [10.13.0] (2023-08-22)并在每个版本头部给出 git compare 链接。变更类型共有四种Bugfix、Change、Enhancement、Security这与仓库内 changelog/README.md 的说明一致。1.2 变更条目如何产生changelog/README.md 明确说明了发布流程开发者按 changelog/TEMPLATE 模板在 changelog/unreleased 目录中为每个变更创建一个文本文件每次合并到 master 后CHANGELOG.md 会被 calens 工具自动重新生成并提交正式发布时将 unreleased 中的文件复制到以版本号_日期命名的目录如10.16.4_2026-07-29。模板还约束了正文写作规范首行是 80 字符以内的现在时标题正文段落使用过去时末尾列出 Issue / PR / 文档链接并以首个 Issue或首个 PR编号作为该条目主 ID。这套流水线保证了 CHANGELOG.md 始终与仓库实际提交保持一致也让每个条目都可回溯到具体代码改动。二、11.0.0一次以安全为核心的大版本升级11.0.02026-07-30 发布是本文涉及的最新正式版本version.php 中$OC_VersionString 11.0.0与之对应且$OC_VersionCanBeUpgradedFrom允许从 8.2.11 / 9.0.9 / 9.1 直接升级。该版本的安全条目数量在全部版本中最多值得逐条分析。2.1 高危安全修复Security变更编号核心问题修复方式Prevent params body from overriding validated occ command#41577OccController 先用白名单校验 URL 路径命令再通过array_merge合并用户提交的 params请求体中的 command 键可覆盖已校验值合并前从 params 数组中剥离 command 键Remove plaintext federation auth token from error log#41578getSharedSecret 收到无效 token 时会把“提交值”和“正确值”都明文写进日志公开端点可被任意未认证者反复触发两处日志不再输出 token 值Replace strcmp token oracle with hash-based comparison#41579requestSharedSecret 用strcmp()比较 token根据字典序返回不同响应未认证攻击者约 96 次请求即可二分还原 token改用 token 的 SHA-256 哈希比较Restrict unserialize() allowed classes in CommandJob#41582CommandJob::run()对来自oc_jobs表的数据无限制调用unserialize()数据库写入者可构造 PHP 对象链实现 RCE反序列化仅允许经过校验的 ICommand 实现Sanitize storage connection error messages#41585外部存储状态接口把 Guzzle cURL 异常原文含解析出的 IP、端口返回给客户端可被用于测绘内网完整异常仅服务端记录客户端收到通用消息Prevent user enumeration via differential password reset UI#41586登录页仅在后端存在且支持改密时显示“Reset it?”链接LDAP 用户与不存在用户的响应不同移除后端能力检查统一显示重置链接Disable group-admin feature by default#41634子管理员组管理员功能存在已知安全短板默认关闭由新配置allow_subadmins控制升级后旧分组管理员分配被忽略直到管理员显式开启Do not trust cached binary paths#41732ffmpeg、avconv、AtomicParsley 等预览辅助二进制的路径缓存在分布式缓存中未校验即未经引号拼入 shell 命令路径只存入本机缓存层、使用前校验、拼命令时加引号Enforce the read permission in public share preview endpoint#41751公共分享预览端点按 token 解析分享后直接渲染文件未检查权限位掩码分享不含 read 权限时返回 404与 ShareController::downloadShare() 保持一致Confine backend provided user homes to the data directory#41752用户后端如 LDAP 的 homeDirectory 属性可提供任意 home 路径仅校验了前导斜杠指向代码目录即导致用户文件列表读写应用自身 PHP 文件相对路径含..亦可逃逸home 必须解析到配置的 datadirectory 之内合法外部目录可列入新配置user.home_base_dirs比较前解析符号链接Encode search highlights before they are returned as a DAV property#41760files search REPORT 的 search-highlights 属性原样返回基于文件内容构建的片段恶意分享者可注入任意 HTML片段在换行替换前先做 HTML 编码2.2 关键运维配置落地allow_subadmins 与 user.home_base_dirs上述两条安全变更对应的新配置均已在 config/config.sample.php 中落档allow_subadmins falseconfig/config.sample.php默认关闭组管理员委派注释明确说明这是风险缓解措施只有确实需要委派式组管理且理解组管理员可管理组内用户时才开启。user.home_base_dirs []config/config.sample.php默认只允许 datadirectory 内的 home若用户 home 合法地位于数据目录之外如独立 NFS 挂载在此列出允许的基目录。每个条目必须是绝对路径相对路径会被忽略否则会相对于执行检查的进程的工作目录解析列表务必保持最小绝不能包含 ownCloud 代码目录。2.3 重大行为变更Change最低 PHP 版本提升到 8.3#41449 中执行。升级前务必确认运行环境满足 PHP 8.3。移除db:convert-type命令#41451该实验性命令未经测试且不受支持。删除 11 版本遗留与废弃代码#41455包括OC_DB、OC_Group_Backend、OC_OCS_Result、\OCP\DB、MDB2SchemaManager::getDbStructure()等一批类与方法。移除缓存路由器#41733测量显示生成 URL 比一次缓存往返更快且缓存可能带来 URL 过期或被篡改的隐患。G2 代码签名验证器上线G1 签名于 2027-01-01 日落#41680G2 验证器校验完整证书链、强制算法白名单并检查 fail-closed CRLG1 签名在2026-12-31T23:59:59Z之后全部停止验证硬编码日落与单证书有效期无关。运行第三方 G1 签名应用的实例需在截止日前规划重新签名版本。移除occ integrity:sign-app与integrity:sign-core#41712签名属于发布与 CI 关注点integrity:check-app、integrity:check-core验证功能不受影响。ICacheFactory接口新增createLocal()#41753实现OCP\ICacheFactory的应用从该版本起必须声明该方法以便将仅对产生它的节点有意义的值排除在跨节点共享缓存之外。2.4 值得关注的 Bugfix 与架构调整htaccess RewriteBase 修复#41418occ maintenance:update:htaccess生成的规则原先按 URI 扩展名判断是否路由到 index.php导致/apps/files/api/v1/files/photo.jpg这类 API 请求返回 405现改为RewriteCond %{REQUEST_FILENAME} !-f虚拟 API 路径正确进入前端控制器真实静态文件仍直接返回。旧式 ajax 路由去后缀化#41740、#41743以/settings/ajax/setlanguage.php为代表的旧路由其声明 URL 本身是磁盘上的真实文件导致请求绕过前端控制器直接执行脚本并报Class OC not found。所有此类路由 URL 已去除.php后缀JS 调用方改用OC.generateUrl()/core/ajax/update.php因自引导而保留后缀并排除在重写之外。解密版本与回收站后才能关闭加密#41623occ encryption:decrypt-all原先只遍历files目录files_versions与files_trashbin仍带 encrypted 标记导致encryption:disable拒绝执行现在 decrypt-all 会深入两个目录disable 命令会列出仍标记为加密的路径及清理提示。匿名页尊重语言配置#41618语言工厂原先缓存了 “en” 兜底值使登录页与口令保护的公共分享页总是英文兜底值不再被缓存后default_language与 Accept-Language 生效。损坏翻译不再导致 500#41720PHP 8 下vsprintf()遇到格式符不匹配会抛 ValueErrorOC_L10N_String::__toString()现在对这类翻译回退到未翻译原文。三、unreleased 分支即将随下一个版本发布的修复unreleased 部分收录了尚未正式发布的变更同样是 Bugfix 与 Change 两类checkPropFind 事件优先级调整#41676PROPFIND 期间的 checkPropFind 事件必须先于 Sabre DAV 的 httpPropFind 事件执行此前依赖字母序恰好排前现在显式降低优先级数值提高优先级保证任何排序下都先执行。occ 设置配置值不再回显密钥#41779config:system:set与config:app:set原先会把刚写入的值打印到 stdoutWOPI 签名密钥、应用 JWT 密钥因此泄漏进终端滚动区、容器日志或 CI 日志。修复后当配置键是敏感键时打印占位符。识别逻辑复用 lib/private/SystemConfig.php 中既有的敏感键列表新增了isSensitiveKey()访问器并回退到按键名匹配credential / key / passwd / password / pwd / salt / secret / token模式从而覆盖 core 并不知晓的应用键如wopi.token.key、jwt_secret布尔值因不可能承载密钥仍正常显示写入行为不变。这是对config:app:set/config:system:set运维场景最直接的安全改进。Oracle 下文件缓存写入恢复索引使用#41782Oracle 上 upsert 的每个比较列此前都被to_char()包裹——该转换仅对文本与二进制列必需但被应用到所有列导致fs_storage_path_hash唯一索引失效上传、重命名与文件扫描在大规模实例上显著变慢现只对文本与二进制比较列做转换。Oracle 上避免 filecache 路径哈希的弃用告警#41808Oracle 无法存储空字符串存储根路径为空串时被转为 nullmd5(null)在 PHP 8 下触发“隐式 null 转字符串”弃用告警现在先转成字符串再哈希。命令行安装器恢复 Oracle 支持#41808maintenance:install重新接受--databaseoci及--database-connection-stringWeb 安装器仍不提供 OraclesupportedDatabases默认只列 sqlite/mysql/pgsql。注意这恢复的是该数据库层的测试覆盖并非对 Oracle 生产支持的声明。BMP 预览解码失败时释放文件句柄#41835位图预览原先仅解码成功才关闭文件无法解码的文件会泄漏句柄直至进程结束现在无法打开的文件返回“无预览”而非令整个请求失败。分享对话框中本地与联邦用户同时命中时显示联邦用户#41807服务端对含的搜索词总会猜测为联邦云 ID即使它是本地账户的邮箱该猜测现仅在搜索词精确命中本地用户或组时被跳过。rhukster/dom-sanitizer 改为带版本号的 tagged release#41785此前以dev-main分支 pin 引入无版本号使漏洞扫描器永远无法匹配公告区间现要求^1.0.10并解析到 1.0.14功能等价属于打包与可审计性修复。四、10.16.x 系列安全补丁与关键回归修复4.1 10.16.42026-07-29子管理员改邮箱时误改调用者地址#41574setMailAddress 的子管理员路径中验证令牌与确认链接绑定在调用者账户上点击链接改的是子管理员自己的邮箱现已绑定到目标用户。遗留分块 WebDAV 上传尊重写钩子否决#41763分块上传拼装最终文件时未检查 pre-write 钩子结果绕过了普通上传路径应用的文件名黑名单现拼装阶段遇到钩子否决即中止。4.2 10.16.32026-05-22该版本是典型的安全补丁版phpseclib 升级至 3.0.52#41529修复 CVE-2026-40194SSH 二进制包处理中的时序攻击。symfony/routing 升级至 5.4.52#41559修复 CVE-2026-45065UrlGenerator 路由约束因未锚定正则分支被绕过可注入站外 URL。AppConfigController 读方法限制为完整管理员#41550子管理员此前可通过 Settings API 读取全部oc_appconfig值包括 SMTP 密码、LDAP 绑定凭据与加密主密钥已移除 getApps/getKeys/getValue 上的NoAdminRequired。本地存储挂载限制可被绕过#41538以内部类名作为后端时可绕过“禁止挂载本地存储”的配置现已修复。管理 API 改邮箱时误用请求者 ID#41539修复了把管理员的用户 ID 当作目标用户 ID 使用的问题。WebDAV 评论 API 的 IDOR#41558认证用户可凭任意评论 ID 读写删除无权访问文件上的评论现在校验请求的评论确实属于 URL 中的文件。4.3 10.16.12026-02-18SVG 消毒扩展至 ImageMagick 处理的全部文件内容#41433。配对可信服务器禁止空 token#41434。新增 .toml 与 .ovpn 的 mimetype 别名/映射#41431。4.4 10.16.02025-10-23不可用的分享存储不再阻塞整个目录列表#41338。phar 流包装器默认全局禁用#41406此前仅对非 CLI 访问禁用现 CLI 也禁用与 10.15.2 的 CVE-2025-32804 修复方向一致。中日韩输入优化全局搜索#41328中文/日文输入的最小字符数要求降为 2。五、10.15.x更新器退役与远程服务加固5.1 10.15.32025-07-04禁用 Web 更新器#41149CVE-2025-53827Web 更新器早已不推荐使用现从管理 UI 中移除集成。加固远程服务解析#41374CVE-2025-53829webdav、caldav 等远程服务只能从应用或硬编码列表加载。5.2 10.15.2 与 10.15.110.15.22025-03-11禁用 phar 流包装器#41358CVE-2025-32804。10.15.12025-03-03防止通过 HTTP API 访问以remote_与public_前缀的内部应用配置键#41355CVE-2025-27844。5.3 10.15.02024-06-18运维要点preview_max_dimensions 默认值改为 6016x6016#41263默认即可处理 4K 竖屏图片。外部存储 API 在allow_user_mounting初始未定义时逻辑修正#41272全新安装中该选项未勾选表示禁止但代码在管理员首次操作前一直按“允许”处理。未联网实例不再轮询更新检查#41262。六、10.14.0 与 10.13.x功能增强与数据库优化6.1 10.14.02024-02-19多页文档预览改为从第一页生成#41045doc、odt、pdf 等此前从最后一页生成预览。user:list -a正确显示用户创建时间#41125此前误显示 home 路径。oc_file_locks.id改为 bigint#41158。LDAP 组正确应用到外部存储#41063。isAdmin 实现替换#41171不再询问后端用户所属组改为取管理员组并列出其成员。6.2 10.13.02023-08-22与 10.13.x升级到 Symfony 5#39630console/event-dispatcher/process/routing/string/translation 均升至 v5.4.26。新增 occ 命令files:remove-storage含--show-candidates#40779清理已从 ownCloud 移除的存储遗留的 DB 元数据。新增联邦可信服务器命令行管理命令#40796。可强制执行 2FA#40830需要至少一个实现 2FA 的应用管理员可选择排除特定组。10.13.1 允许禁用后台任务#40969禁用后不会自动运行但可手动执行。10.13.2 删除用户时清理对象存储文件#40959此前 S3 上残留文件占用空间。10.13.2 改进预览清理查询性能#40974并移除耗时且已无用的 “Fill E-Tags” repair 步骤#40996。七、10.12.x 与 10.11.0会话、配额与分享体验7.1 10.12.02023-02-24新增登录策略支持#40574可按用户使用的登录类型用户名密码、openidconnect 等与其所属组决定是否放行登录。持久化大版本文件版本工作流#40531恢复操作改为从历史非当前版本生成新的当前版本当前版本可在 Versions Tab 中发布递增大版本号被标记为发布的版本不受保留策略约束废弃save_version_author迁移到save_version_metadata。配额耗尽时禁止创建空文件/文件夹#40567。cookie 处理变更#39916新增session_forced_logout_timeout配置默认禁用启用后 passphrase cookie 在指定秒数后过期强制重新登录。session_keepalive为 true 时周期性访问 heartbeat 端点延长会话。remove_sender_display_name true#40671移除通知邮件 From 地址中的发件人显示名规避邮件过滤器将其判为身份冒用。10.12.1 修复 32 位系统 507 错误#40709occ encryption:encrypt-all不再自动启用 user-key 加密#40702。7.2 10.11.02022-08-23支持一次与多个用户分享#40155格式user1, user2, user3。新配置proxy_ignore#40148按域名绕过proxy设置的代理。配额不足时向接收分享目录复制文件返回 507#40140。应用令牌不因 LDAP 短暂不可用而失效#40152。occ background:queue:status新增 Last Checked / Reserved At / Execution Duration 列#40113。八、10.10.0 与 10.9.0性能、文件校验与大量 occ 命令8.1 10.10.02022-05-16capabilities 中默认 poll-interval 改为 30000 毫秒#39143原为 60ms。SFTP 私钥移入 oc_credentials 表加密存储#39935私钥不再离开服务器挂载配置中只存指向它的随机令牌。FS 支持部分初始化#40031部分命令不再需要 LDAP 连接即可工作。propfind depthinfinity 默认调整#40016规避无限 propfind 开启时的潜在性能问题。8.2 10.9.02021-12-20MOVE 操作性能优化#3864910.8.0 引入移动文件夹时用一条 DB 查询替换全部内容路径MySQL/MariaDB/PostgreSQL/OracleSQLite 除外。新增user:home:list-dirs与user:home:list-users#39579occ user:home:list-users path列出指定路径下的用户--all列出所有 home 路径的用户。occ dav:cleanup-chunks新增--local选项#39394多服务器共享同一数据库且配置了独立dav.chunk_base_dir时只删除本机文件系统上的分块。MariaDB 10.6 支持#39286升级场景先执行occ db:restore-default-row-format移除废弃的 compressed 行格式。occ files:transfer-ownership新增--destination-use-user-folder user-id#39118可整体迁移用户文件与分享到从未登录过的目标账户。新增occ user:move-home user_id new_location#39136。JP(E)G 预览质量新配置previewJPEGImageDisplayQuality#39349。webp 缩略图生成支持#39358。allow_user_to_change_mail_address与allow_user_to_change_display_name解耦#39288。限制公开链接分享创建到指定组#38980enterprise #3632。快速创建只读公开链接的动作#39130由sharing.showPublicLinkQuickAction开启。九、10.8.0 及更早版本基础设施演进的关键节点9.1 10.8.02021-07-15PHP 最低版本提升至 7.2.5#38934并预告 PHP 7.3 安全补丁将在 2021-12 结束。http.cookie.samesite配置#38458可取 Strict / Lax / NoneOpenID Connect 场景需要 None。db.platform强制数据库平台#38379。redis / redis.cluster 新增connection_parameters#38386支持 SSL/TLS要求 php-redis ≥ 5.3.0、redis server ≥ 6.0。所有标记为密码的挂载配置项加密存储#38728不再局限于少数已知项。phoenix 更名为 web#38199配置键变为web.baseUrl、web.icon、web.label。新增 SMB Collaborative 外部存储#38151所有用户共享同一文件 ID利于标签、评论与 Collabora/OnlyOffice 协作。Google Drive 支持挂载子目录#38161。X-XSS-Protection 头由1; block改为0#38236遵循 OWASP 建议该头已弃用。9.2 10.7.02021-03-26预签名下载 URL#38376为口令保护的公开链接提供预签名 URL支持不使用 cookie 的客户端。新加密文件格式配置#38337显著减小文件体积新格式为默认旧格式文件仍可读。外部存储“登录凭据保存于会话”与“启用分享”不兼容时禁用分享选项并提示#38483。X-Robots-Tag 检查放宽#4071510.13.0允许noindexnofollow组合。9.3 10.6.0 与 10.5.0occ encryption:disable安全加固#35980存在加密文件时退出并报错防止误关加密导致数据不可读同时清理加密相关配置键使重新启用成为可能。远程分享支持到期日期#37548到期由源服务器控制目标服务器在分享到期后自动移除通过公开链接抓取到本机的分享不受此功能约束。敏感值列表持续扩充openid client secret#37782与 metrics 共享密钥#37848被加入 config 报告的掩码列表。checksum 在重传与创建版本时保留#37934。外部存储 SFTP 私钥、Google Drive 修改不再产生重复文件、部分上传.part命名可被后端显式关闭#25826。十、贯穿历次版本的主题敏感数据保护CHANGELOG.md 反复出现对“敏感数据泄漏”的修复这是理解 ownCloud 安全策略的一条主线也与 lib/private/SystemConfig.php 中集中维护的sensitiveValues列表dbpassword、mail_smtppassword、passwordsalt、secret、updater.secret、ldap_agent_password、proxyuserpwd、metrics_shared_secret、redis.password、objectstore 凭据、openid-connect.client-secret、license-key 等相互印证日志层面联邦认证 token#41578、Session 令牌#40066、#40792不再明文落日志。输出层面occ配置命令回显占位符#41779异常页面的 debug 堆栈过滤方法参数#39334。接口层面外部存储错误消息脱敏#41585禁止 API 暴露remote_/public_内部键#41355AppConfigController 读方法限管理员#41550。十一、如何利用 CHANGELOG.md 制定升级与排障策略先读 unreleased 再读目标版本unreleased 中的修复会在下一个版本落地其中config:system:set回显占位符#41779直接影响现有脚本的输出解析逻辑。关注 Change 类条目的破坏性PHP 最低版本11.0.0 → 8.3、Symfony 5/7 组件升级、db:convert-type移除、ICacheFactory::createLocal()接口变更都属于升级前必须验证的项。把 Security 条目映射到配置加固新配置allow_subadmins、user.home_base_dirs在 config/config.sample.php 与 config/config.sample.php 中均有完整注释与默认值可在升级前先行评估。利用敏感值列表自查对照 lib/private/SystemConfig.php 中的键路径检查自建脚本是否会经occ config:system:get等渠道输出敏感内容。版本对应验证当前仓库 version.php 为 11.0.0git频道CHANGELOG.md 与changelog/目录按版本号_日期规则归档可据此核对部署版本与变更条目的一致性。附文中引用的仓库文件索引CHANGELOG.md本文主体完整变更流水线产物changelog/README.mdcalens 变更日志生成流程说明changelog/TEMPLATE单条变更条目的编写模板changelog/unreleased未发布变更的原始条目version.php当前版本号 11.0.0 与可升级来源范围config/config.sample.phpallow_subadmins、user.home_base_dirs等配置的默认值与注释lib/private/SystemConfig.phpsensitiveValues敏感键定义与isSensitiveKey()访问器赞分享后端内容协同【免费下载链接】core:cloud: ownCloud web server core (Files, DAV, etc.)项目地址https://gitcode.com/gh_mirrors/core84/core点击查看免费下载相关推荐PostCSS 变更日志深度解读从 8.5.26 到 0.1 的演进脉络与安全加固全析PostCSS 变更日志深度解读从 8.5.26 到 0.1 的演进脉络与安全加固全析 PostCSS 是一个用 JavaScript 插件转换 CSS 的工前端前端构建cloudflare_temp_email 变更日志深度解读从 v0.0.0 到 v1.13.0 的功能演进与升级实战指南cloudflare_temp_email 变更日志深度解读从 v0.0.0 到 v1.13.0 的功能演进与升级实战指南 cloudflare_temp_e后端前端PhpSpreadsheet 变更日志深度解读从 1.0 到 5.10 的版本演进、破坏性变更与安全实践PhpSpreadsheet 变更日志深度解读从 1.0 到 5.10 的版本演进、破坏性变更与安全实践 本文以仓库根目录的 CHANGELOG.md htt后端上一篇clean-code-php代码可搜索性实战告别魔法数字与心智映射的3个原则下一篇Huihui-Qwythos-9B-Claude-Mythos-5-1M-abliterated-GGUF如何突破1M上下文限制的无审查AI模型技术解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表