전체 목록
Next.jsHard#437

Server Actions를 사용할 때 보안상 주의해야 할 점은 무엇인가요?

#Next.js#ServerActions#보안#검증

답변 포인트

서버에서 실행된다는 이유만으로 클라이언트 입력을 신뢰해도 되는지 생각해보세요.

정답 및 해설

빠른 요약

Server Actions는 클라이언트에서 호출할 수 있지만 서버에서 실행되는 함수입니다. 폼 처리나 mutation을 간결하게 만들 수 있지만, “서버 코드니까 안전하다”라고 착각하면 위험합니다.

Server Actions는 클라이언트에서 호출할 수 있지만 서버에서 실행되는 함수입니다. 폼 처리나 mutation을 간결하게 만들 수 있지만, “서버 코드니까 안전하다”라고 착각하면 위험합니다.

가장 중요한 원칙은 클라이언트 입력을 절대 신뢰하지 않는 것입니다. Action은 네트워크를 통해 호출될 수 있으므로 권한 검증, 입력 검증, CSRF 고려, rate limit이 필요합니다.

TypeScript
'use server';

export async function updateProfile(formData: FormData) {
  const user = await requireUser();
  const displayName = String(formData.get('displayName') ?? '').trim();

  if (displayName.length < 2 || displayName.length > 30) {
    throw new Error('잘못된 이름입니다.');
  }

  await db.user.update({
    where: { id: user.id },
    data: { displayName },
  });
}

또한 민감한 토큰이나 secret을 action의 반환값으로 보내면 안 됩니다. 서버에서 실행되더라도 반환 데이터는 클라이언트로 전달됩니다. 에러 메시지도 내부 SQL, stack trace, 권한 구조를 노출하지 않도록 정리해야 합니다.

Server Actions는 API route를 대체할 수 있는 편리한 도구지만, 결국 외부 입력을 받는 mutation endpoint라는 관점으로 다뤄야 합니다.

관련 질문

같은 카테고리/태그 기준