October CMS后台缓存导致用户编辑页未授权访问问题咨询
问题原因分析
- 核心漏洞匹配:你使用的October CMS Build 469版本存在已知的后台路由缓存权限校验缺陷,官方在后续Build 470版本专门修复了该问题。
- 受影响路由正好是你提到的两类页面:
backend/users/update/*后台用户编辑页、rainlab preview用户页面,这两个路由在该版本默认配置了10分钟的HTTP响应缓存规则,当superuser访问后,响应内容会被直接缓存到memcached中,后续未登录用户访问相同路径时,系统会直接返回缓存内容,不做身份权限校验。 - 缓存仅存储静态页面内容,不会携带登录用户的有效CSRF token,所以你只能查看页面数据,提交操作时会触发token校验失败,和你观测到的现象完全匹配。
- 10分钟后页面无法访问的现象,正好对应该路由默认的缓存有效期配置,缓存过期后请求会重新走权限校验逻辑,未登录用户就会被跳转至登录页。
- 该问题和你多站点部署、memcached前缀配置无关,属于单站点内核的路由缓存规则缺陷。
关闭October CMS后台缓存的方法
方法1:全局关闭后台路由缓存(最便捷)
修改站点根目录下config/cms.php配置文件,找到enable_backend_route_cache参数,将值修改为false:
return [ // 其他配置项不变 'enable_backend_route_cache' => false, ];
修改完成后执行命令清理现有缓存即可生效:php artisan cache:clear
方法2:仅关闭受影响路由的缓存(不影响其他功能缓存)
在站点routes/backend.php文件中添加路由覆盖规则,移除指定路由的缓存中间件:
// 禁用后台用户编辑页缓存 Route::get('users/update/{user_id}', [\Backend\Controllers\Users::class, 'update']) ->withoutMiddleware(\October\Rain\Router\Middleware\CacheResponse::class); // 禁用rainlab preview用户页面缓存 Route::get('rainlab/user/preview/{user_id}', [\RainLab\User\Controllers\Users::class, 'preview']) ->withoutMiddleware(\October\Rain\Router\Middleware\CacheResponse::class);
添加后同样执行php artisan cache:clear清理旧缓存即可。
方法3:永久修复建议
直接升级October CMS到Build 470及以上正式版本,官方已在该版本修复了该权限漏洞,无需手动修改配置。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

