大多数应用只在记录活着的时候查一遍权限,删掉之后就不管了。回收站页面跑的是自己那套查询,大致就是 deleted_at IS NOT NULL AND workspace_id = ?,查出来什么就显示什么。标题、所有者,只要你能打开回收站,全都能看见。
打开网易新闻 查看精彩图片
于是共享工作区里的一个普通成员,打开回收站,看到一份叫「Q4 重组计划」的文档——它原本躺在一个他从没权限进的私密文件夹里。更糟的是,有些应用还让他点「恢复」,文档回来的时候,最后编辑人一栏写的就是他。
问题出在权限检查被拆成了两套逻辑:正常列表一套,回收站一套。而回收站这套,往往只按工作区过滤,忘了记录被删之前属于谁、放在哪。
修法其实不复杂,关键是别偷懒。
- 回收站列表要跑和正常列表一样的读取检查,用的是记录被删前那一刻的权限。
- 这意味着删除行上得保留父文件夹 ID,检查才有东西可查。
- 恢复要当成独立检查:用户既要有这条记录的编辑权,也要有它要回去的那个文件夹的写权限。
- 永久删除只留给管理员没问题,但回收站列表本身,永远不该显示用户删之前看不到的东西。
很多人会想,删都删了,还查什么权限。可回收站不是归档,它是给用户看的界面,界面就得守同一套规矩。删掉的是记录的状态,不是它的归属关系。
测试方法也简单:用一个用户把文档放进私密文件夹,删掉;再用第二个不在那个文件夹里的用户打开回收站。如果标题冒出来了,说明你的回收站视图跳过了权限检查。
这类漏洞不吵不闹,不会报错,也不会触发告警。它只是安静地把一份你不该知道的文档标题,摆在了一个你不该看到它的地方。
热门跟贴