본문 바로가기
Q&A2026년 5월 29일2분 읽기

tRPC 12 + Server Actions — createCaller가 RSC에서 권한 체크 통과돼서 보안 사고날 뻔

최예린
조회 376댓글 2

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

아직 댓글이 없습니다.
Ctrl+Enter로 등록