ThinkPHP权限验证的隐蔽漏洞:redirect跳转也要做权限校验?

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
站长杂谈 10 浏览 1 回复

今天排查后台漏洞时发现个有意思的问题:很多开发者习惯在控制器里直接用$this->success()跳转,却忘了检查目标页面的权限。比如管理员操作日志页面做了权限控制,但从用户编辑页success跳转时却畅通无阻。

实测场景:用户编辑页提交后跳转到/admin/log,如果只做菜单节点权限校验,这个跳转就会绕过鉴权。解决方法有两个:要么在跳转前手动check权限,要么用route()生成带签名的路由。TP6的中间件方案更优雅,但要注意路由分组时的中间件继承问题。

同类型的坑还有AJAX请求的权限控制。很多开发者只校验菜单权限,却忘了接口也要加鉴权。上周帮朋友排查的案例:某CMS的getUserList接口本应是管理员权限,但因为没做二次校验,普通用户构造请求就能拿到用户数据表。

建议权限体系至少要包含三层防护:菜单节点校验、控制器方法鉴权、敏感数据二次确认。特别是涉及金钱或隐私的操作,像支付回调这种常见功能点,务必做请求来源验证和操作令牌校验。

评论1
回复 · 1
迷路的橙子
迷路的橙子 新手番响心动 · #1 ·
支持了~
微信客服 微信客服