fix(editor-api): 身份判定改为会话优先,防止配置漂移静默提权
identify() 原来「令牌优先」:令牌对得上就用 X-Editor-* 头的身份,没有头时默认 admin。 国内线路的 nginx 目前不注入令牌,但一旦配置回滚到「注入令牌」的旧版本,编辑的请求 会命中令牌分支 → 静默获得管理员权限(看到全部文章、能改别人的、能全量发布)。 改为「会话(真实的人)优先于共享令牌(服务身份)」,把边界写死在代码里而不是靠配置。 新增断言:编辑会话 + 管理员令牌头 → 仍按编辑身份。role-perm.mjs 47/47
This commit is contained in:
1 parent
d899cd793b
commit
68416366eb
2 files changed
+22
-7
No files matched your search
@@ -413,6 +413,13 @@ async function main() {
|
||||
// 到这一步编辑名下有 3 篇了:自己的、按昵称认领的老文章、以及第 ④ 节新建的那篇
|
||||
check('用这枚 Cookie 列文章 → 只看到自己的 3 篇', r.status === 200 && r.data.total === 3, 'total=' + r.data.total);
|
||||
|
||||
// ★ 会话优先于共享令牌。国内线路的 nginx 目前不注入令牌,但万一配置漂移回
|
||||
// 「注入令牌」的旧版本,请求会同时带着管理员身份的令牌头 + 编辑的浏览器会话。
|
||||
// 此时必须以「人」为准 —— 否则编辑会静默拿到管理员权限。
|
||||
r = await call('GET', '/posts', { cookie: edCookie, ident: ADMIN });
|
||||
check('编辑会话 + 管理员令牌头 → 仍按编辑身份(只看自己 3 篇)',
|
||||
r.status === 200 && r.data.total === 3, 'total=' + r.data.total);
|
||||
|
||||
// 把签名载荷里的 r 改成 admin(签名仍是按 editor 算的)→ 必须拒
|
||||
r = await call('GET', `/admin/handoff?ts=${String(Date.now())}&u=7&n=%E5%B0%8F%E7%BE%8E&r=admin&t=${sigFor('7', '小美', 'editor')}`);
|
||||
check('把角色改成 admin 但签名不匹配 → 403', r.status === 403, 'got ' + r.status);
|
||||
|
||||
Reference in new issue
Block a user