RSC PAYLOAD / TWO-GATE CHECKPOINT
Props 双闸门检查站
一个值能穿过 React Server Components 边界,只说明 React 会传;它是否应该出现在浏览器里,是另一道必须单独回答的安全题。
两道关,两种问题第一关:React 能否序列化?
第二关:用户是否应该看到?
候选值料盘
React 19 支持的类型不只 JSON。
- ◇可由 React 表示
- ×会在第一关拦截
双闸门与 DTO 白名单
类型检查通过后,仍要执行最小公开策略。
闸门 A · REACT 可序列化
等待候选值
选择或拖入一个值,检查它能否跨越 Server / Client 边界。
○ 等待投件以下六个数据库字段当前都是字符串,因此已经通过闸门 A;字符串内容仍可能是秘密。
闸门 B · 是否适合公开:勾选准备公开的字段。条件字段需要再确认业务用途与授权,秘密字段没有放行选项。
闸门 B 放行2 个最小公开字段可以进入浏览器。
2 PASS
把两个问题分开问
DTO 白名单不是为了“修复序列化”,而是为了明确控制浏览器最终能看到哪些字段。
- 可序列化
- React 能表示并跨边界传输。
- 不等于公开安全;秘密字符串照样可序列化。
- Server Function
- 普通函数规则的明确例外,可从客户端调用。
- 参数由客户端控制,服务端仍必须验证输入、认证与授权。
- 条件字段
email、内部角色没有全局统一答案。- 从具体页面用途出发,按最小化原则和当前用户授权决定。
- 硬秘密
- 令牌、密码哈希、私钥不进入 DTO。
- 不要依赖 RSC Payload 难读、环境变量命名或前端隐藏来保密。