tRPC 12의 createCallerFactory로 RSC에서 procedure를 직접 호출하는 패턴을 도입했습니다. 그런데 일부 procedure가 권한 체크 미들웨어를 건너뛰는 걸 발견했습니다. 보안팀이 발견하기 전에 패치하긴 했는데 어떻게 정착시켜야 할지 모르겠습니다.
// server/trpc.ts
export const createCaller = createCallerFactory(appRouter)
// app/dashboard/page.tsx
import { createCaller } from '@/server/trpc'
export default async function Page() {
const caller = createCaller({}) // ← ctx 빈 객체!
const data = await caller.user.profile() // 권한 체크 통과
return <Profile data={data} />
}
실수로 createCaller({}) 빈 컨텍스트로 호출하니 procedure 내부의 ctx.user가 undefined인데도 권한 체크 통과. 모든 사용자 데이터에 접근 가능한 상태였습니다.
이런 실수를 빌드 단계에서 막을 방법이 있을까요?
댓글 0